首页 > 解决方案 > SQL Server - MySQL 迁移错误:不正确的字符串值:'\xF4\x80\x82\x83...'

问题描述

我是 MySQL 新手,正在使用 MySql Workbench 8.0 迁移工具将 Windows Server 2008 R2 上客户端的 MS SQL Server 2008 R2 数据库迁移到 Windows 2016 Server 上 x86_64 上 Win64 的 MySql Ver 8.0.11(MySQL 社区服务器 - GPL) ,使用表数据的在线副本到目标 RDBMS 选项复制数据。

我在“Collat​​ion SQL_Latin1_General_CP1_CI_AS migrated to 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: 字符集和排序规则变量

迁移工具似乎忽略了这一点?有谁知道我怎样才能让这些数据原封不动地移动,最好是使用易于使用的迁移工具?(请记住,我在这种环境中缺乏经验意味着我需要非常明确的帮助)。谢谢!

标签: mysqlsql-serverdatabasemysql-workbenchdatabase-migration

解决方案


您使用什么迁移工具?

上次我也有同样的问题,但使用的是 AWS DMS。它来自表情符号字符。如果你有和我一样的情况,你可以使用“额外连接属性”来替换源端点的表情符号字符。

示例:parallelLoadThreads=1;ReplaceChars=F09F988A,3F,F09F9982,3F,F09F8CBB,3F,F09FA681,3F,F09F918C,3F,F09F9882E298,3F

对于另一种方式,您可以在保存到数据库之前删除表情符号字符。它对数据库迁移工具不友好。


推荐阅读