【问题标题】:SQL Server to Mysql migration (using Mysql Workbench). How to add data with manually escaped apostrophe during steps in Workbench wizard?SQL Server 到 Mysql 的迁移(使用 Mysql Workbench)。如何在 Workbench 向导的步骤中添加带有手动转义撇号的数据?
【发布时间】: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 文件
  • 谢谢米洛斯·博泽克。看起来唯一的现有选项是复制数据库 -> 在此数据库中进行更改(转义字符串) -> 使用工作台向导执行迁移。

标签: mysql sql-server mysql-workbench data-migration


【解决方案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 的回答。

      我只是重新制定了它。

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

      【讨论】:

        猜你喜欢
        • 2013-11-12
        • 2014-10-15
        • 2016-03-17
        • 2013-05-12
        • 1970-01-01
        • 2013-06-17
        • 1970-01-01
        • 2020-01-18
        • 1970-01-01
        相关资源
        最近更新 更多