Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MSSQL SQL Server迁移到(Linux)MySQL时的编码问题_Mysql_Sql Server 2008_Mysql Workbench - Fatal编程技术网

从MSSQL SQL Server迁移到(Linux)MySQL时的编码问题

从MSSQL SQL Server迁移到(Linux)MySQL时的编码问题,mysql,sql-server-2008,mysql-workbench,Mysql,Sql Server 2008,Mysql Workbench,我正在使用MySQL工作台,并成功地将与SilverStripe PHP CMS一起使用的SQL Server数据库迁移到Linux上的MySQL。问题是,当内容显示在LinuxWeb服务器上时,我必须将编码更改为Western(Windows-1252)才能正确显示内容。Windows IIS with SQL Server上的站点以默认UTF-8编码正确显示 在MySQL Workbench上的手动迁移编辑部分,一些专栏说,collationLatin1\u General\u CI\u已迁

我正在使用MySQL工作台,并成功地将与SilverStripe PHP CMS一起使用的SQL Server数据库迁移到Linux上的MySQL。问题是,当内容显示在LinuxWeb服务器上时,我必须将编码更改为Western(Windows-1252)才能正确显示内容。Windows IIS with SQL Server上的站点以默认UTF-8编码正确显示

在MySQL Workbench上的手动迁移编辑部分,一些专栏说,
collationLatin1\u General\u CI\u已迁移到utf8\u General\u CI
,因此我认为这是正确的

网站正在HTML中设置

迁移过程:

  • 在上使用MySQL Workbeanch从SQL Server迁移到MySQL 生产服务器
  • 将生产服务器上的MySQL数据库导出到*.sql文件
  • 使用PHPMyAdmin和默认UTF-8编码将*.sql文件导入Linux服务器

  • 我不确定在迁移过程中我需要在何处修复此问题?

    有3种可能出现问题的可能性:

  • 在原始SQL server设置中编码未命中配置。有关如何实现这一点的更多详细信息,请参阅本文:。在这种情况下,SQL数据库中的编码不正确,但由于设置错误,它显示正确

  • 您在迁移过程中犯了一个错误。然后新MySQL数据库中的编码不正确。

  • 新的MySQL数据库中的编码是正确的,但是新的Linux MySQL设置中存在编码未命中配置,这使得它看起来不正确

  • 要检查哪种情况适用,您必须通过某种独立的工具检查两个数据库中的编码,确保(至少200%!!!)正确配置了编码。如果是Linux,我会使用PHPMyAdmin,我不知道SQL server上有什么可用的。但是要确保这个工具配置正确,否则你会被愚弄

    发布结果,我将相应地展开我的答案。
    编辑:Dave,我已经对迁移过程的步骤进行了编号。请在两个点检查MySQL数据库的编码-在步骤1之后(在执行导出和导入之前)以及在步骤3导出和导入之后。这将必须检测出错误的确切位置。

    这可能与迁移过程无关

    如果使用PHP访问新数据库,则连接字符集可能不正确。 设置连接后,应将连接字符集设置为UTF-8

    $db = new MySQLi(HOST, USER, PASSWORD, DATABASE);
    $db->set_charset('utf8');
    
    或者,如果您没有使用MySQLi:

    mysql_connect(/*...*/);
    mysql_set_charset('utf8');
    

    这表明内容没有以正确的编码开始存储,和/或上一个应用程序正在编码之间转换内容。您是否使用文本编辑器查看了*.sql文件以了解内容的格式?你看过文件编码本身了吗?MySQL扩展从PHP5.5.0开始就不推荐使用,将来会被删除。我建议使用mysqliapi。我是。这就是我首先编写MySQLi示例的原因。谢谢大家。在SilverStripe中,我必须将配置设置为MySQLDatabase::set_connection_charset('utf8'),然后配置数据库层。@DaveO这是我的选项3,不幸的是,你没有回复,所以我无法扩展我的答案。@Tomos很抱歉,我刚刚回到这个问题,并立即应用了发布的解决方案,所以我没有得到你要求的检查。