【问题标题】:table transfer from MySQL to MSSQL fails从 MySQL 到 MSSQL 的表传输失败
【发布时间】:2009-12-11 15:05:43
【问题描述】:

我正在尝试使用 MS SQL 管理工作室中的数据迁移工具将表从 MySQL 传输到 MSSQL。我正在为 odbc 使用 .net 提供程序并选择表格并尝试转移。但是正在获取数据库中的总表但是当我尝试传输它时会出错。 即使我尝试预览数据,它也会说,

the preview data could not be retrieved.
Additional Information:
Error [42000].... there is an error near line 1 ( myodbc5.dll).

有什么问题吗?

我从 MySQL 网站下载了驱动程序,现在我尝试重新安装超过 10 次。

我错过了什么?

请帮帮我。

【问题讨论】:

  • 您用于 ODBC 连接的连接字符串是什么?
  • 如果是连接字符串问题,试试看这个网站:connectionstrings.com
  • 我正在使用 SQL SERVER Management Studio 并提到驱动程序为:MySQL 5.1 ODBC 驱动程序

标签: mysql sql-server


【解决方案1】:

根据您的帖子,可能存在多个问题。我建议将故障排除分解为以下步骤:

  1. 尝试使用 Management Studio 和 SSIS 以外的工具连接到服务器,以查看您的 ODBC 连接是否正常工作。我建议使用Toad for MySQL by Quest Software。它是免费的,并且具有与 Management Studio 类似的 UI。

  2. 正确连接到服务器后,尝试查询数据以验证您是否有足够的权限。

  3. 在登录到需要连接到 MySQL 数据库的服务器时执行步骤 1 和 2。您可能会在服务器上遇到与在桌面上不同的连接问题。例如,服务器在域上的保护方式可能不同,或者您的服务器上可能存在桌面上不存在的驱动程序兼容性问题。

  4. 尝试使用 ODBC 连接设置链接服务器连接。在一台服务器上,我们发现我们可以成功地让它工作,但我们无法让 SSIS 正确地使用 ODBC 连接。在更糟糕的情况下,您可以使用 SSIS 执行链接服务器查询,以通过存储过程调用来获取数据。以下是在本例中为我们工作的示例链接服务器连接。

    EXEC master.dbo.sp_addlinkedserver @server = N'Some_MySQL_Server_Name', @srvproduct=N'MySQLDatabase', @provider=N'MSDASQL', @datasrc=N'Some_ODBC_Name'

    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'Some_MySQL_Server_Name',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

    去

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'collat​​ion compatible', @optvalue=N'false' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'data access', @optvalue=N'true' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'dist', @optvalue=N'false' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'pub', @optvalue=N'false' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'rpc', @optvalue=N'false' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'rpc out', @optvalue=N'false' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'sub', @optvalue=N'false' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'connect timeout', @optvalue=N'0' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'collat​​ion name', @optvalue=null 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'惰性模式验证', @optvalue=N'false' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'查询超时', @optvalue=N'0' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'使用远程排序规则', @optvalue=N'true' 去吧

    EXEC master.dbo.sp_serveroption @server=N'Some_MySQL_Server_Name', @optname=N'remote proc transaction Promotion', @optvalue=N'true' 去吧

  5. SSIS 数据流应使用 ADO.NET 源。不要依赖“表或视图”数据访问模式。而是使用 SQL 命令。我注意到 SSIS 有时会出现正确读取元数据的问题,您可能需要 CAST 一些字段来解决此问题。有时它会使列过长或过短。注意源上的数据类型,看看 SSIS 是如何弄乱长度的。我不记得是什么原因造成的,但如果我的记忆正确的话,它似乎与可空性和字符串数据类型有关。我建议将其发送到数据读取器目的地并使用数据查看器查看数据以查看它是否正确。您可能还需要在源和目标之间添加一个数据转换步骤,以便从 unicode 转换为非 unicode。

如果您确定问题出在 ODBC 连接上,那么您可能需要尝试以下设置:

  1. 标志 1:返回匹配的行而不是受影响的行;允许大结果集;使用压缩;将 BIGINT 列视为 INT 列。

  2. 标志 2:连接时不提示。

  3. 标志 3:在 SQLDescribeCol() 中包含表名;禁用事务支持。 调试:将查询记录到 myodbc.sql。

  4. SSL 设置:如果这还没有结束,请将其留空 SSL。

单击测试应返回连接成功。如果这可行,那么您应该能够让 Toad for MySQL 使用它。

如果您选择链接服务器路线,请确保 ODBC 名称与定义的数据源完全匹配。我相信我们发现这是区分大小写的,但我不再完全确定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多