SQL Server 到 Mysql 的迁移(使用 Mysql Workbench)。如何在 Workbench 向导的步骤中添加带有手动转义撇号的数据?

Posted

技术标签:

【中文标题】SQL Server 到 Mysql 的迁移(使用 Mysql Workbench)。如何在 Workbench 向导的步骤中添加带有手动转义撇号的数据?【英文标题】:SQL Server to Mysql migration (using Mysql Workbench). How to add data with manually escaped apostrophe during steps in Workbench wizard? 【发布时间】:2017-03-06 13:27:18 【问题描述】:

我知道如何避开撇号。问题是不同的。如何在 Workbench 向导的步骤中添加带有手动转义撇号的数据?

我有同样的问题 SQL Server to mysql migration (using Mysql Workbench) data transfer error

如何手动将转义添加到撇号 ('),然后在工作台向导中运行最后一步以进行数据迁移?

我的错误是不同的: 语句执行失败:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的 在第 1 行的 's Homestead'、'Regina Murphy'、'Sales Representative'、'707 Oxford Rd.'、'Ann Arbor'' 附近使用的语法:

INSERT INTO `Northwind`.`Suppliers` (`SupplierID`, `CompanyName`, `ContactName`, `ContactTitle`, `Address`, `City`, `Region`, `PostalCode`, `Country`, `Phone`, `Fax`, `HomePage`)

VALUES

(3,'Grandma Kelly's Homestead','Regina Murphy','Sales Representative','707 Oxford Rd.','Ann Arbor','MI','48104','USA','(313) 555-5735','(313) 555-3349',NULL),

看起来像“Kelly's”这个词中的撇号产生了问题。

【问题讨论】:

我知道如何避开撇号。问题是不同的。如何在 Workbench 向导的步骤中添加带有手动转义撇号的数据?请删除重复标签。 很公平。重新打开:p 只有一种方法可以解决这个问题,您必须修复源代码并重新构建。如果您知道如何从头开始构建 Workbench,我可以告诉您具体需要做什么。同时,请在bugs.mysql.com 填写错误报告 看起来不是 mysql 错误,而是工作台向导中缺少在迁移期间手动更改数据的选项。我以 Northwind 数据库为例。我使用了来自microsoft.com/en-us/download/details.aspx?id=23654 的 instnwnd.sql 文件 谢谢米洛斯·博泽克。看起来唯一的现有选项是复制数据库 -> 在此数据库中进行更改(转义字符串) -> 使用工作台向导执行迁移。 【参考方案1】:

这是 MySQL Workbench(版本 6.3.8)中的一个错误。这是错误页面:http://bugs.mysql.com/bug.php?id=83616

编辑:

事实证明,当使用 Workbench 中的迁移向导进行迁移时,如果源列中的字符串(可以是 text 或 varchar)中包含撇号字符,则会出现该错误,因为 Workbench 没有转义撇号。

我遇到了同样的问题并使用了Topplestack's workaround。为了避免更改源数据,我还在 MySQL 中替换了撇号。

编辑2:

他们已经在 MySQL Workbech 6.3.9 中修复了它。这是来自bug fixes part of the changelog的条目:

在表的文本字段中包含单引号 (') 会导致 MySQL 架构传输向导失败。 (错误 #24978403、错误 #83616)

【讨论】:

【参考方案2】:

我正在处理同样的问题。据我所知,您需要运行

Replace(string_column, '''', ''''''); 

Replace(string_column, '''', '&apos'); 

导入前在源数据库上。我不确定是否可以将其作为导入脚本的一部分运行。我的脚本能力有些有限。

编辑:

这在 MSSQL Server 上对我有用:

BEGIN TRANSACTION;
  UPDATE [dbo].[Table]
  SET Field = REPLACE(Field, '''', '''''');
COMMIT TRANSACTION;

【讨论】:

【参考方案3】:

这是 Milosz Bodzek 的回答。

我只是重新制定了它。

看起来唯一的现有选项是复制数据库 -> 在此数据库中进行更改(转义字符串)-> 使用工作台向导执行迁移。

【讨论】:

以上是关于SQL Server 到 Mysql 的迁移(使用 Mysql Workbench)。如何在 Workbench 向导的步骤中添加带有手动转义撇号的数据?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据迁移到SQL Server

从mysql迁移到sql server

Mysql迁移到Sql Server

如何将 SQL Server 存储过程迁移到 Mysql [关闭]

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

从 MySQL 到 SQL Server 的 Hibernate + Spring 迁移