MySQL Workbench 从 SQL Server 2008 迁移到 MySQL:错误:确定要复制的行数:不支持的操作数类型

Posted

技术标签:

【中文标题】MySQL Workbench 从 SQL Server 2008 迁移到 MySQL:错误:确定要复制的行数:不支持的操作数类型【英文标题】:MySQL Workbench migration from SQL Server 2008 to MySQL : ERROR: Determine number of rows to copy: unsupported operand type(s) 【发布时间】:2013-02-21 08:46:54 【问题描述】:

我正在尝试使用 mysql Workbench 5.2.46CE 将数据库从 SQL Server 2008 迁移到 MySQL。在复制数据之前一切正常(步骤“批量数据传输”):

开始... 准备数据复制的信息... 准备 数据复制完成的信息 确定要复制的行数 复制.... 计算表中的行数... wbcopytables.exe --count-only --passwords-from-stdin --odbc-source=Driver=SQL Server;Server=.\sqlexpress;Database=... ;User Id=... ;Password=... --table-file=... 错误: 决定 要复制的行数:+ 不支持的操作数类型:'NoneType' 和'str'失败

我真的不明白为什么我会得到这个,所以如果你们有任何想法...... :) (PS:我今天开始使用 SQL Server 2008 和 MySQL Workbench,所以我真的不知道它们是如何工作的)

EDIT 2 - SQL Express 表 DDL(更新)

CREATE TABLE [dbo].[S_OCivilite](
    [OCIV_Id] [int] IDENTITY(0,1) NOT N'',
    [OCIV_Code_Pan] [nvarchar](3) NOT N'',
    [OCIV_Intitule_Pan] [nvarchar](35) NOT N'',
    [OCIV_DateModif_Pd] [datetime] NOT N'',
 CONSTRAINT [PK_OCIV_Id] PRIMARY KEY CLUSTERED 
(
    [OCIV_Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 CONSTRAINT [IX_OCIV_Code_Pan] UNIQUE NONCLUSTERED 
(
    [OCIV_Code_Pan] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

【问题讨论】:

对我来说这听起来更像是一个错误。你应该为它提交一个错误报告bugs.mysql.com 【参考方案1】:

从一个数据库转移到另一个数据库时,您总是会遇到数据类型转换的障碍。简而言之,您需要了解源数据库中的表结构以及这些表结构如何映射到目标数据库中的相同结构。所有这些 SQL 数据库都支持或应该支持 ANSI SQL,这是 SQL 的集体共同方面,但是每个数据库供应商具有使交叉转换变得有趣的程序扩展和 DDL。

因此,阅读您的问题,您没有 SQL Server 2008,而是 SQL Express,它是 SQL Server 的“精简”版本。您的错误是在读取表以获取行数时,它发现了数据类型或不受支持的 ddl 语句并且无法处理类型转换。

我使用 MySQL 工作台,但没有尝试迁移完整的数据库。您应该寻找放松类型转换的设置或将所有内容作为 varchar 发送到 MySQL,然后让后续的 ETL 过程正确处理和类型转换数据。或者一次做一张桌子,直到你明白它真正在抱怨什么。

如果您可以发布它所抱怨的记录或记录,或者来自 SQLExpress 的表 DDL,那将真的有帮助。

编辑 1:对 SQL DDL 编辑的响应

我首先会怀疑 SQL Server 中的 Identity 列。 MySQL 对应的 Datatype 应该是 AUTO_INCREMENT 。您需要找到 Bulk loader 的日志。您应该能够设置日志记录级别并实际查看它在抱怨什么。

【讨论】:

在导入过程中,选项并不多,所以我认为我不能告诉他将所有内容都转换为 varchar(也许通过修改完成所有工作的 python 脚本,但是我不知道 python ^^)...我查看了 SQL Server Management Studio 以更改数据库的选项,但没有找到任何相关的内容...我尝试单独迁移几个表,但总是出现错误(我认为这可能是 NULL 值的问题,但是没有任何 NULL 值的事件表会发送错误..)。 这是一个来自 SQL Management Studio 的表示例: CREATE TABLE [dbo].[S_OCivilite]( [OCIV_Id] [int] IDENTITY(0,1) NOT NULL, [OCIV_Code_Pan] [nvarchar ](3) 非空,[OCIV_Intitule_Pan] [nvarchar](35) 非空,[OCIV_DateModif_Pd] [日期时间] 非空) 我只找到了 1 个日志文件(用户/AppData/Roaming/MySQL/Workbench/log),但我认为这不会有帮助,因为没有更多信息:pastebin.com/cwJCRTs7。 Workbench 在 MySQL 数据库中正确创建新表,然后尝试计算行数并且...失败:(我查看了 Workbench 设置,但没有找到有关日志的任何内容(他们的设置中没有很多东西)。 如果不是您的 DDL,那么它必须是数据本身。 MySQL中对应的表定义是什么样的?它是如何处理 Identity 列的? MySQL 中的 OCIV_Id 是 AUTO_INCREMENT 字段类型吗? 这里是 MySQL DDL:如果不存在则创建表 S_OCivilite (OCIV_Id int(11) NOT NULL AUTO_INCREMENT, OCIV_Code_Pan varchar(6) NOT NULL, OCIV_Intitule_Pan varchar(70 ) NOT NULL, OCIV_DateModif_Pd timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (OCIV_Id), UNIQUE KEY IX_OCIV_Code_Pan (OCIV_Code_Pan)) 。一切似乎都还好,Workbench 在这方面做得很好

以上是关于MySQL Workbench 从 SQL Server 2008 迁移到 MySQL:错误:确定要复制的行数:不支持的操作数类型的主要内容,如果未能解决你的问题,请参考以下文章

无法从 MYSQL Workbench 6.3 CE 连接到 MS SQL 服务器 [重复]

Mysql Workbench - 将 sql 脚本从 ER 图中导出到数据库

MySQL Workbench 从 SQL Server 2008 迁移到 MySQL:错误:确定要复制的行数:不支持的操作数类型

MySQL Workbench将模型生成SQL文件出错

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

在 MySQL WorkBench 中从 SQL 脚本生成图表