我正在使用MySQL Workbench并成功地将SilverStripe PHP CMS使用的SQL Server数据库迁移到Linux上的MySQL。问题是当内容显示在Linux Web服务器上时,我必须将编码更改为Western(Windows-1252)以使内容正确显示。带有SQL Server的Windows IIS上的站点使用默认的UTF-8编码正确显示。
在MySQL Workbench的手动迁移编辑部分,有些专栏说Collation Latin1_General_CI_AS migrated to utf8_general_ci
,所以我认为这是正确的。
网站正在HTML中设置<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
。
迁移过程:
我不确定迁移过程中我需要解决这个问题?
答案 0 :(得分:1)
有三种可能出错的可能性:
在原始SQL服务器设置中编码未命中配置。请查看此帖子,了解有关如何实现这一目标的更多详细信息:https://stackoverflow.com/a/20824533/684229。在这种情况下, SQL数据库中的编码不正确,但由于设置错误,它会正确显示。
您在迁移过程中犯了一个错误。然后 new MySQL数据库中的编码不正确。
新 MySQL数据库中的编码是正确的,但在新的Linux MySQL设置中存在编码未命中配置,这使其看起来不正确
要检查哪种情况适用,您必须通过一些独立的工具检查两个数据库中的编码,肯定(200%至少!!!)正确配置了编码。我会在Linux的情况下使用PHPMyAdmin,我不知道SQL服务器上有什么可用。但请确保正确配置此工具,否则您将被愚弄!
编辑: Dave,我已经编写了迁移过程的步骤。请在两个点检查MySQL数据库的编码 - 在第1步之后(之前执行导出和导入)以及之后导出&amp;在步骤3中导入。这将必须检测出错的确切位置。
答案 1 :(得分:1)
这可能与迁移过程无关。
如果您使用PHP访问新数据库,则连接字符集可能不正确。 设置连接后,应将连接字符集设置为UTF-8。
$db = new MySQLi(HOST, USER, PASSWORD, DATABASE);
$db->set_charset('utf8');
或者,如果您不使用MySQLi:
mysql_connect(/*...*/);
mysql_set_charset('utf8');