我正在尝试将一些数据从MSSQL迁移到MySQL。当我运行
wbcopytables.exe
时,mysql连接的字符集似乎是错误的,当数据包含表情符号时(http://apps.timwhitlock.info/unicode/inspect?s=%F0%9F%8C%A8%E2%98%83%EF%B8%8F),我会收到一个错误提示:Incorrect string value: '\xF0\x9F\x8C\xA8\xE2\x98...' for column 'Value' at row 4
我的服务器、数据库、表和列都使用了charset=utf8mb4
和collation=utf8mb4_unicode_ci
。然而,我可以使用我创建的一个.NET应用程序将这些表情符号插入到该表中,因此这不是架构/服务器设置的问题。这使我认为wbcopytables.exe
在连接时强制执行了其他编码(可能是utf8)。我尝试根据其他SO问题中的建议将所有mysql变量更改为强制执行utf8mb4,我的.ini文件中有以下内容:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET collation_connection = utf8mb4_unicode_ci'
skip-character-set-client-handshake
编辑: 关于wbcopytables.exe本身的更多信息,请参考以下链接:https://dev.mysql.com/doc/workbench/en/wbcopytables.html。
wbcopytables
?它的文档在哪里? - Rick Jameswbcopytables.exe
是随 MySQL Workbench 一起提供的 CMD 实用工具。 - andy250NVARCHAR
列并将SQL Server连接编码设置为Unicode吗? - Álvaro González