Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Workbench进行MS SQL到MySQL的转换-对所选方案进行反向工程时出错_Mysql_Mysql Workbench - Fatal编程技术网

使用Workbench进行MS SQL到MySQL的转换-对所选方案进行反向工程时出错

使用Workbench进行MS SQL到MySQL的转换-对所选方案进行反向工程时出错,mysql,mysql-workbench,Mysql,Mysql Workbench,我正在尝试使用workbench 6.0 CE将MS SQL数据库迁移到MySQL。在“逆向工程所选方案”步骤中,我得到了“UnicodeDecodeError”。我想知道如何调试这个问题?所有的表名都非常直接,没有使用任何特殊字符 错误日志如下所示: Starting... Connect to source DBMS... - Connecting... Connecting to Mssql@DRIVER=SQL Server;SERVER=localhost\instance1..

我正在尝试使用workbench 6.0 CE将MS SQL数据库迁移到MySQL。在“逆向工程所选方案”步骤中,我得到了“UnicodeDecodeError”。我想知道如何调试这个问题?所有的表名都非常直接,没有使用任何特殊字符

错误日志如下所示:

Starting...

Connect to source DBMS...

- Connecting...

Connecting to Mssql@DRIVER=SQL Server;SERVER=localhost\instance1...

Opening ODBC connection to DRIVER={SQL Server};SERVER=localhost\instance1;DATABASE={};UID=sa;PWD=XXXX;...

Connected

Connect to source DBMS done

Reverse engineer selected schemata....

Reverse engineering dbo from testdb

- Reverse engineering catalog information

- Reverse engineering User Data Types...

- Preparing...

- Gathered stats for dbo

Reverse engineering 379 tables from dbo

Traceback (most recent call last):

  File "C:\Program Files (x86)\MySQL\MySQL Workbench CE 6.0.8\modules\db_mssql_grt.py", line 384, in reverseEngineer

    reverseEngineerTables(connection, schema)

  File "C:\Program Files (x86)\MySQL\MySQL Workbench CE 6.0.8\modules\db_mssql_grt.py", line 545, in reverseEngineerTables

    table_names = [(row[0], row[1]) for row in execute_query(connection, query % schema.name) ]

  File "C:\Program Files (x86)\MySQL\MySQL Workbench CE 6.0.8\modules\db_mssql_grt.py", line 130, in <lambda>

    con.add_output_converter(-150, lambda value: value if value is None else value.decode('utf-16'))

  File "C:\Program Files (x86)\MySQL\MySQL Workbench CE 6.0.8\Python\Lib\encodings\utf_16.py", line 16, in decode

    return codecs.utf_16_decode(input, errors, True)

**UnicodeDecodeError: 'utf16' codec can't decode byte 0x73 in position 54: truncated data**



Traceback (most recent call last):

  File "C:\Program Files (x86)\MySQL\MySQL Workbench CE 6.0.8\workbench\wizard_progress_page_widget.py", line 192, in thread_work

    self.func()

  File "C:\Program Files (x86)\MySQL\MySQL Workbench CE 6.0.8\modules\migration_schema_selection.py", line 160, in task_reveng

    self.main.plan.migrationSource.reverseEngineer()

  File "C:\Program Files (x86)\MySQL\MySQL Workbench CE 6.0.8\modules\migration.py", line 353, in reverseEngineer

    self.state.sourceCatalog = self._rev_eng_module.reverseEngineer(self.connection, self.selectedCatalogName, self.selectedSchemataNames, self.state.applicationData)

SystemError: UnicodeDecodeError("'utf16' codec can't decode byte 0x73 in position 54: truncated data"): error calling Python module function DbMssqlRE.reverseEngineer

ERROR: Reverse engineer selected schemata: UnicodeDecodeError("'utf16' codec can't decode byte 0x73 in position 54: truncated data"): error calling Python module function DbMssqlRE.reverseEngineer

Failed
正在启动。。。
连接到源DBMS。。。
-连接。。。
连接到Mssql@DRIVER=SQL Server;服务器=localhost\instance1。。。
打开ODBC连接到驱动程序={SQL Server};SERVER=localhost\instance1;数据库={};UID=sa;PWD=XXXX;。。。
有联系的
连接到源DBMS完成
对选定的模式进行反向工程。。。。
从testdb反向工程dbo
-逆向工程目录信息
-反向工程用户数据类型。。。
-准备。。。
-为dbo收集统计数据
dbo的379个表的反向工程
回溯(最近一次呼叫最后一次):
反向工程中的文件“C:\Program Files(x86)\MySQL\MySQL Workbench CE 6.0.8\modules\db\u mssql\u grt.py”,第384行
reverseEngineerTables(连接、架构)
反向工程表中的文件“C:\Program Files(x86)\MySQL\MySQL Workbench CE 6.0.8\modules\db\u mssql\u grt.py”,第545行
表_name=[(行[0],行[1]),用于执行_查询(连接,查询%schema.name)]
文件“C:\Program Files(x86)\MySQL\MySQL Workbench CE 6.0.8\modules\db\u mssql\u grt.py”,第130行,在
con.add_output_converter(-150,lambda值:如果值不是其他值,则为值。解码('utf-16'))
文件“C:\Program Files(x86)\MySQL\MySQL Workbench CE 6.0.8\Python\Lib\encodings\utf_16.py”,第16行,解码
返回编解码器.utf_16_解码(输入,错误,真)
**UnicodeDecodeError:“utf16”编解码器无法解码位置54:截断数据中的字节0x73**
回溯(最近一次呼叫最后一次):
线程工作中的文件“C:\Program Files(x86)\MySQL\MySQL Workbench CE 6.0.8\Workbench\wizard\u progress\u page\u widget.py”,第192行
self.func()
文件“C:\Program Files(x86)\MySQL\MySQL Workbench CE 6.0.8\modules\migration\u schema\u selection.py”,第160行,在task\u reveng中
self.main.plan.migrationSource.ReverseeEngineer()
反向工程中的文件“C:\Program Files(x86)\MySQL\MySQL Workbench CE 6.0.8\modules\migration.py”,第353行
self.state.sourceCatalog=self.\u rev\u eng\u module.reverseEngineer(self.connection、self.selectedCatalogName、self.selectedSchemataNames、self.state.applicationData)
SystemError:UnicodeDecodeError(“'utf16'编解码器无法解码第54位的字节0x73:截断数据”):调用Python模块函数dbmsqlre.reverseEngineer时出错
错误:反向工程所选架构:UnicodeDecodeError(“utf16”编解码器无法解码位置54:截断数据中的字节0x73”):调用Python模块函数dbmsqlre.reverseEngineer时出错
失败
谢谢你的帮助。
-Deepak

我知道这是一个老问题,但我的MySQL工作台在尝试从SQL Server数据库迁移时由于同样的原因崩溃。我已经纠正了这个问题,将默认编码更改为“C:\Program Files\MySQL\MySQL Workbench 8.0 CE\modules\db\U mssql\U grt.py”文件中的相应编码。我有这两行(我的脚本中有141-142行):


con.add_output_converter(-150,lambda值:如果值不是其他值,则为值。解码('utf-16'))
con.添加输出转换器(0,lambda值:如果值不是其他值,则为值。解码('utf-16'))

在我的例子中,SQL Server使用的是cp1252,因此我将utf-16更改为cp1252。

这听起来很像是无效内容。由于无法解码数据,utf16转换无法工作。所以,请查看特定的专栏,看看它包含什么,也许可以做一些修复,使其可转换。谢谢你的回复。就所有表和列的名称而言,这些表和列不使用任何此类字符,但我知道,在各种表中有数据具有双字节字符,例如中文、日语字符。我怎么知道哪个表/列产生了问题?嗯,好问题。我希望错误消息包含有问题的表(甚至可能是列)。如果不是这样的话,您可以尝试至少通过在转换过程中一个接一个地包含一个表来查找有问题的表。大约有400个表,因此这样做可能不可行。我想知道“反向…”步骤是否真的会在这段时间内查看数据?另外,如果这是数据问题,最终是否会有一种方法将数据移动到MySQL(如果我想先在MySQL中创建完全相同的数据库)?我必须这样做,Migration Workbench不应该能够处理任何SQL Server对象。我以为是为了迁移。很没用的产品,对我有用。MySQL工作台8.0.23版;SQL Server 2012(SP1)-11.0.3128.0(X64)