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 向导的步骤中添加带有手动转义撇号的数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 SQL Server 存储过程迁移到 Mysql [关闭]