首页 > 代码库 > 将SQL Server 2000数据导入到MySQL 5.5的方法

将SQL Server 2000数据导入到MySQL 5.5的方法

一、安装MySQL 5.5(可以与SQL Server不在同一台服务器上),并新建一个空的数据库(一般用utf-8编码),用于接收导入的数据。

二、在SQL Server的服务器上安装mysql-connector-odbc-5.3.2-win32。

三、在SQL Server的服务器上运行“管理工具”->“数据源(ODBC)”,切换到“系统DSN”面板,添加“MySQL ODBC 5.3 Unicode Driver”,填写“Data Source Name”为任意名称,填写“TCP/IP Server”和“Port”为MySQL数据库的IP和端口(一般为3306),再填写有数据库权限的用户和密码(一般为root用户,不装在本机的MySQL需要开通root远程访问权限),最后选择“Database”为第二步创建的数据库。

四、运行SQL Server的企业管理器,右键单击需要导出的数据库,在上下文菜单上选择“所有任务”->“导出数据”。点击下一步,先确认数据源的数据库名称是否正确(这一步一般选择Windows验证,也可以换成SQL Server身份验证)。再点击下一步,选择“目的”为“MySQL ODBC 5.3 Unicode Driver”,再选择“用户/系统 DSN”为第三步创建的Data Source。点击下一步,选择“从数据库复制表和视图”。点击下一步,在选择源表和视图中点击全选,点击下一步,然后立即执行。

五、数据导出成功后,SQL Server中的表字段为主键和自增量的字段不会在MySQL中设置成功。还需要回到MySQL,进行手工设置。可以使用Navicat MySQL图形工具或者执行SQL:

ALTER TABLE `users`
MODIFY COLUMN `id`  int(11) NOT NULL AUTO_INCREMENT FIRST ,
ADD PRIMARY KEY (`id`);


我在导出数据的过程中,有些表在COPY数据时会发生错误。我遇到的错误和解决办法如下:

1、某个表的某个字段 cannot be null

在导出数据之前,先在SQL Server中将该表的该字段设置为“允许为NULL”

2、某个表的某个字段 Data too long for column ‘name‘

这种情况发生在安装了mysql-connector-odbc-5.1.2-win32,且SQL Server某记录存在中文乱码。改用mysql-connector-odbc-5.3.2-win32并选择MySQL ODBC 5.3 Unicode Driver后,问题解决。

3、某个表 id doesn‘t have a default value

查询Google,有解决办法禁用MySQL的strict Mode,参见:http://blog.csdn.net/god8816/article/details/8593419

其实只需要手工修改MySQL中该表的id字段为主键+Auto Increment,然后进入企业管理器,重新导出该表即可。