MySQL数据迁移 - wbcopytables字符集

5
我正在尝试将一些数据从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=utf8mb4collation=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 James
我已经更新了问题。wbcopytables.exe 是随 MySQL Workbench 一起提供的 CMD 实用工具。 - andy250
你所拥有的唯一证据表明源数据是否正确编码就是.NET应用程序吗?你至少使用了NVARCHAR列并将SQL Server连接编码设置为Unicode吗? - Álvaro González
已经有一段时间了,我想我完全放弃了wpcopytables,并在C#中实现了一个自定义脚本。 - andy250
https://stackoverflow.com/questions/46866272/mysql-migration-wizard - tsu1980
显示剩余5条评论
1个回答

0

我曾经遇到过类似的问题,原来我的源数据库采用的是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或类似的命令来删除或编辑这些行作为预处理步骤。
我不能说这很有趣,但它确实有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接