SQL Server - MySQL 迁移错误:不正确的字符串值:'\xF4\x80\x82\x83...'
Posted
技术标签:
【中文标题】SQL Server - MySQL 迁移错误:不正确的字符串值:\'\\xF4\\x80\\x82\\x83...\'【英文标题】:SQL Server - MySQL migration error: incorrect string value: '\xF4\x80\x82\x83...'SQL Server - MySQL 迁移错误:不正确的字符串值:'\xF4\x80\x82\x83...' 【发布时间】:2018-10-18 18:42:23 【问题描述】:我是 mysql 新手,我正在使用 MySql Workbench 将 Windows Server 2008 R2 上客户端的 MS SQL Server 2008 R2 数据库迁移到 Windows 2016 Server 上 x86_64 上 Win64 的 MySql Ver 8.0.11(MySQL 社区服务器 - GPL) 8.0 迁移工具,使用 Online copy of table data to target RDBMS 选项复制数据。
我收到关于“Collation SQL_Latin1_General_CP1_CI_AS 已迁移到 utf8_general_ci”的所有 SQL Server varchar 和 ntext 列的警告,但这似乎只是具有两个 ntext 列的表的问题。该表无法迁移数据,出现“不正确的字符串值:'\xF4\x80\x82\x83...'”错误。
虽然我对字符集和排序规则有点模糊,但我在互联网上的搜索表明问题在于 MySQL 的 utf8 只允许 3 个字节,我需要将这些数据移动到允许 4 个字节的 utf8mb4 下。 我像这样更改了 my.ini 文件:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
character-set-client-handshake = FALSE
collation-server = utf8mb4_unicode_ci
这导致 character_set_* 的以下变量值(大部分)为 utf8mb4,但 character_set_system 仍为 utf8,character_set_filesystem 为二进制。排序规则变量为 utf8mb4_unicode_ci: Character set and collation variables
迁移工具似乎忽略了这一点?有谁知道我怎样才能让这些数据完好无损地移动,最好是使用易于使用的迁移工具? (请记住,我在这种环境中缺乏经验意味着我需要非常明确的帮助)。谢谢!
【问题讨论】:
【参考方案1】:您使用什么迁移工具?
上次我也有同样的问题,但使用的是 AWS DMS。它来自表情符号字符。如果你有和我一样的情况,你可以使用“额外的连接属性”来替换源端点的表情符号。
示例: parallelLoadThreads=1;ReplaceChars=F09F988A,3F,F09F9982,3F,F09F8CBB,3F,F09FA681,3F,F09F918C,3F,F09F9882E298,3F
另一种方法是,您可以在保存到数据库之前删除表情符号字符。它对数据库迁移工具不友好。
【讨论】:
以上是关于SQL Server - MySQL 迁移错误:不正确的字符串值:'\xF4\x80\x82\x83...'的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server - MySQL 迁移错误:不正确的字符串值:'\xF4\x80\x82\x83...'
从 MySQL 到 SQL Server 的 Hibernate + Spring 迁移
SQL Server 2008 R2 到 MySQL 的迁移