我正在尝试将一些数据从mssql移动到mysql。当我在mysql连接上运行wbcopytables.exe时,字符集似乎是错误的,当数据包含emoji图标(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=utf8mb4collation=utf8mb4_unicode_ci。不过,我可以将那些emoji图标插入到表中,同时在表的一侧创建一个.net应用程序,因此这与架构/服务器设置无关。这使我认为wbcopytables.exe正在对连接强制执行其他编码(可能是utf8)。我尝试更改所有mysql变量以强制执行utf8mb4,如my i.ini中的其他so问题所示:
[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

最佳答案

我有一个类似的问题,原来我的源数据库有Latin1编码,但应用程序允许输入UTF8数据。不用说这引起了问题。我必须将源数据库中的数据导出到csv中,然后使用LOAD DATA LOCAL INFILE代替指定的字符编码。例如。

load data local infile
'C:\\SentryLink Search\\Git\\WebApp\\sql\\data_subject_address_clean.csv'
replace into table subject_address
character set latin1
fields terminated by ',' OPTIONALLY ENCLOSED BY '\''
escaped by '|'
lines terminated by '\n';

注意,我使用管道字符|作为转义字符,因为它不太可能出现在数据中,也就是说,每隔一段时间就会有一行|',因此作为初步步骤,我们必须使用grep或类似的命令删除或编辑这些行。
我不能说它很有趣,但它是有效的。

09-04 11:21
查看更多