我正在尝试从SQL Server数据库备份文件(.bak
)转换为MySQL。This question和answers非常有用,我已经成功地导入了数据库,但现在却卡在导出到MySQL上。
建议使用MySQL迁移工具包,但似乎已被MySQL工作台取代。是否可以像迁移工具一样使用MySQL工作台从SQL Server进行迁移?
或者,迁移工具包仍然可以在某个地方使用?
发布于 2012-08-03 17:22:07
我使用sqlyog从mssql迁移到mysql。我尝试过Migration toolkit and workbench,但因为它的SJA而喜欢sqlyog。我可以安排导入过程,并且可以使用WHERE子句进行增量导入。
发布于 2011-08-22 17:21:01
PhpMyAdmin有一个导入向导,可以让你导入一个MSSQL文件类型。
有关其支持的数据库脚本类型,请参阅http://dev.mysql.com/doc/refman/5.1/en/sql-mode.html。
发布于 2014-02-04 16:06:12
如上所述,如果您的数据中包含制表符、逗号或换行符,那么使用CSV导出和导入数据将非常困难。值将溢出出字段,并且您将得到错误。如果您的任何长字段中包含带有换行符的多行文本,则此问题会更加严重。
在这些情况下,我的方法是使用BCP命令行实用程序从SQL server导出数据,然后使用LOAD data INFILE。INTO TABLE命令在MySQL中读回数据文件。BCP是最古老的SQL Server命令行实用程序之一(可以追溯到SQL server v6.5的诞生),但它仍然存在,并且仍然是最简单、最可靠的数据输出方法之一。
要使用这种技术,您需要在MySQL中使用相同或等效的模式创建每个目标表。为此,我在SQL企业管理器中右键单击数据库,然后单击任务->生成脚本...并为所有表创建一个SQL脚本。然后,您必须手动将脚本转换为MySQL兼容的SQL (这肯定是作业中最糟糕的部分),最后在MySQL数据库上运行CREATE TABLE命令,这样您就拥有了与SQL server版本相匹配的表-按列、为空并准备好了数据。
然后,从MS-SQL端导出数据,如下所示。
bcp DatabaseName..TableName out TableName.dat -q -c -T -S ServerName -r \0 -t !\t!
(如果您使用的是SQL Server Express,请使用如下的SQL值:-S "ComputerName\SQLExpress")
这将创建一个名为TableName.dat的文件,其中的字段由!和由\0 NUL字符分隔的行。
现在将.dat文件复制到MySQL服务器上的/tmp中,并加载到MySQL端,如下所示:
LOAD DATA INFILE '/tmp/TableName.dat' INTO TABLE TableName FIELDS TERMINATED BY '!\t!' LINES TERMINATED BY '\0';
不要忘记,必须已经在MySQL端创建表(在本例中为TableName)。
当涉及到转换SQL schema时,这个过程是非常痛苦的手动操作,但是它甚至适用于最困难的数据,而且因为它使用平面文件,所以您永远不需要说服SQL Server与MySQL进行对话,反之亦然。
https://stackoverflow.com/questions/3917081
复制相似问题