淘先锋技术网

首页 1 2 3 4 5 6 7

如上所述,如果您的数据中包含制表符,逗号或换行符,那么使用CSV导出和导入数据将非常困难。值将从字段中溢出,您将获得错误。如果您的任何长字段都包含多行文本,其中包含换行符,则此问题会更加严重。

在这些情况下,我的方法是使用BCP命令行实用工具从SQL Server导出数据,然后在MySQL中使用LOAD DATA INFILE .. INTO TABLE命令读取数据文件。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,则使用-S值,如下所示:-S“ ComputerName \ SQLExpress”)

这将创建一个名为TableName.dat的文件,其字段由![tab]分隔!和以\ 0个NUL字符分隔的行。

现在,将.dat文件复制到MySQL服务器上的/ tmp并在MySQL端进行加载,如下所示:

LOAD DATA INFILE '/tmp/TableName.dat' INTO TABLE TableName FIELDS TERMINATED BY '!\t!' LINES TERMINATED BY '\0';

不要忘记,表(此示例中的TableName)必须已经在MySQL端创建。

在转换SQL模式时,此过程非常麻烦,但是它适用于最困难的数据,并且由于它使用平面文件,因此您无需说服SQL Server与MySQL对话,反之亦然。