从 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 不使用此类字符串,因为它通过nvarchar
和nchar
列支持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“不正确的字符串值”错误的主要内容,如果未能解决你的问题,请参考以下文章
从 JCenter 迁移到 mavenCentral 存储库时出现 Gradle 问题
从 Apache cassandra 3.11.4 迁移到 4.0 beta 版本时出现问题
使用 Hibernate 将 Java 应用程序从 DB2 迁移到 BigQuery 时出现错误“找到:int64,预期:整数”