从 MS SQL-Server 迁移数据库时出现 MYSQL Workbench“不正确的字符串值”错误

Posted

技术标签:

【中文标题】从 MS SQL-Server 迁移数据库时出现 MYSQL Workbench“不正确的字符串值”错误【英文标题】:MYSQL Workbench "Incorrect string value" error while migrating database from MS SQL-Server 【发布时间】:2019-10-14 23:34:38 【问题描述】:

我正在尝试将 SQL-Server 数据库迁移到 mysql。我收到错误

"不正确的字符串值:'\xF0\x9F\x98\x8B\xF0\x9F...'"

我正在使用 MySQL Workbench 8.0 CE 创建的批处理文件来查看错误,因为 UI 崩溃并冻结。

源表在Latin1_General_CI_AS

目标表已创建为utf8mb4_0900_ai_ci

源数据库:Mssql@DRIVER=ODBC Driver 17 for SQL Server;SERVER=localhost\SQLEXPRESS (Microsoft SQL Server)

目标数据库:Mysql@localhost:3306

还有什么我可以尝试的吗?

【问题讨论】:

错误很明显。你试图运行一个相当奇怪的字符串。 SQL Server 不使用此类字符串,因为它通过nvarcharnchar 列支持Unicode (UTF16)。您可以简单地键入您想要的文本。脚本是什么样子的?那个字符串是从哪里来的? 您是在询问迁移问题,但没有提供有关您如何尝试迁移数据或发生的任何转换的任何信息。此字符串可能是由于某些工具尝试将 UTF16 文本视为 ASCII,或者其他一些奇怪且不必要的转换最终使用转义序列而不是字符。 至于unnecessary,SO 本身就是一个将文本保存在nvarchar 列中的ASP.NET 应用程序。这些页面使用 UTF8 编码提供。无需特殊代码即可允许任何海报发布非 US-ASCII 字符,例如 αυτό εδώ 或 ²³£§¶¤¦°±。您可以在 SQL Server 中轻松地将 Unicode 文本导出为 UTF8 文件并将其加载到 MySQL。您可以使用 SQL Server 的 SSIS 将数据直接从一个数据库移动到另一个数据库。没有理由使用转义序列 【参考方案1】:

那个十六进制不是Latin1,也不是UTF16;它匹配? 的UTF-8 编码。 (这是前 4 个字节;接下来的两个可能是另一个 Emoji 的开头。)

connection参数需要说数据是utf8mb4编码的。将表指定为 utf8mb4 是不够的。

源表不是 Latin1。或者您没有注意到 Emoji 显示为这个 Mojibake:😋

【讨论】:

以上是关于从 MS SQL-Server 迁移数据库时出现 MYSQL Workbench“不正确的字符串值”错误的主要内容,如果未能解决你的问题,请参考以下文章

从models.py迁移我的数据时出现问题

“需要领域迁移”,从领域数据库中检索值时出现异常

尝试在 sql-server 上迁移时 Flyway 挂起

从 JCenter 迁移到 mavenCentral 存储库时出现 Gradle 问题

从 Apache cassandra 3.11.4 迁移到 4.0 beta 版本时出现问题

使用 Hibernate 将 Java 应用程序从 DB2 迁移到 BigQuery 时出现错误“找到:int64,预期:整数”