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 选项复制数据。

我收到关于“Collat​​ion 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 的迁移

SQL Server 2008 R2 到 MySQL 的迁移

MySQL 到 SQL Server 的迁移

使用 Workbench 迁移向导通过 ssh 将 MS SQL Server 数据库迁移到 MySQL