将 SQL 服务器数据转换为 MySQL

Converting SQL Server data to MySQL

我正在尝试将一些 SQL 服务器数据转换为 mySQL,但让 运行 不断进入障碍。

我认为最简单的方法是将 SQL 服务器数据导出为 CSV 格式并以这种方式导入(我当时并不知道这不是那么容易...!)。一旦我弄清楚如何让它向 CSV 中添加引号,我就尝试导入 mySQL。现在,由于某种原因,数据全部导入时都带有引号。这是我的 mySQL 查询:

LOAD DATA INFILE 'file.csv' INTO TABLE test
FIELDS ENCLOSED BY '"'
TERMINATED BY ","
LINES TERMINATED BY "\n"

这会导入,但它似乎忽略了引号,当数据中出现逗号时,它完全搞砸了行。数据也被导入,包括引号,直接从 table:

查看此数据
"1" "1" "0" "{08CA6F70-735D-46ED-8EAB-C17A8BED1FCD}"    "Reporting_1"   "60"        "Reporting" "ABC"   "2008-04-21 19:25:28.013000000" "False" "True"  "False" "True"  "3" "164"   "2033"  "565077"    "7929083"   "334980"    "2013-01-11 15:35:45.970000000" "False" ""  "0" "False" ""  "0" "0" ""  ""  "False" "False" "True"  "True"  ""  ""  "False"

我需要用 PHP 对此数据进行一些 post 处理,所以我假设我可以用我的代码去掉引号。引号不是 trimmed 使用 trim() 函数(它只是行不通),所以我 str_replaced 引号,这似乎确实有效,但是:

我正在重新映射数据并将其插入另一个 mySQL table(具有不同的列名)。当插入上面处理过的数据时,并不是所有的数据都通过数据库查询。以这个查询为例:

INSERT INTO tesxf.xf_node           (`node_id`,`parent_node_id`,`title`,`description`,`node_name`,`node_type_id`,`display_in_list`) 
VALUES 
('2123','2281','Container Name','','38064','Forum','1')

node_id 和标题等进入新数据库,但 parent_node_id 永远不会。该值始终插入为 0。当我复制上面的查询并手动 运行 时,它会正确插入数据。另外,如果我运行通过mysql_real_escape_string的数据,结果是这样的(这里只转换了两个字段):

INSERT INTO tesxf.xf_node 
(`node_id`,`parent_node_id`,`title`,`description`,`node_name`,`node_type_id`,`display_in_list`) 
    VALUES 
    ('673','[=15=][=15=][=15=]','[=15=][=15=]S[=15=]t[=15=]o[=15=]r[=15=]y[=15=] [=15=]W[=15=]r[=15=]i[=15=]t[=15=]i[=15=]n[=15=]g[=15=] [=15=]-[=15=] [=15=]F[=15=]o[=15=]r[=15=]u[=15=]m[=15=][=15=]','','240576','Forum','1')

我以前从未见过这个。这让我觉得也许从导入的 table 接收到的数据采用某种奇怪的格式,带有一些我看不到的隐藏字符?我怎样才能去掉这些?这可能是数据最初没有正确导入的原因吗?

我是运行ning SQL server 2012 我觉得(不太熟悉)。我的 mySQL 实例是 运行ning 在 OSX 10.6 上并且通常没问题(我使用 postgres 和 oracle 等完成了类似的导入)。

Mysql 是:mysql Ver 14.12 Distrib 5.0.92,适用于使用 EditLine 包装器的 apple-darwin10.0 (i386) PHP 是:PHP 5.3.26 (cli)(内置:2013 年 7 月 7 日 18:30:38)

我在这里失去了理智...我想我的下一次尝试是将构造的查询通过管道传输到文本文件中,然后 运行手动进行...我希望我错过了一些简单的事情。

CSV 文件以二进制模式通过 FTP 传输,我使用 vim 将 :set ff=unix 应用于它们(正如我在此处阅读的那样,这可能是一个问题)。

我还尝试在这台服务器和另外 1 台服务器上为 PHP 安装 SQL Server/freetds 包装器,但不要让我开始这样做!!

您是否尝试过使用 MySql 迁移工具包?如果没有,你可以试试。这里是linkMySql Migration Toolkit