3 回答

TA貢獻(xiàn)1735條經(jīng)驗(yàn) 獲得超5個(gè)贊
我使用sqlyog從mssql遷移到mysql。我嘗試了Migration工具箱和工作臺(tái),但喜歡sqlyog的SJA。我可以安排導(dǎo)入過程,也可以使用WHERE子句進(jìn)行增量導(dǎo)入。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
如上所述,如果您的數(shù)據(jù)中包含制表符,逗號(hào)或換行符,那么使用CSV導(dǎo)出和導(dǎo)入數(shù)據(jù)將非常困難。值將從字段中溢出,您將獲得錯(cuò)誤。如果您的任何長字段都包含多行文本,其中包含換行符,則此問題會(huì)更加嚴(yán)重。
在這些情況下,我的方法是使用BCP命令行實(shí)用工具從SQL Server導(dǎo)出數(shù)據(jù),然后在MySQL中使用LOAD DATA INFILE .. INTO TABLE命令讀取數(shù)據(jù)文件。BCP是最早的SQL Server之一命令行實(shí)用程序(可追溯到SQL Server v6.5的誕生),但它仍然存在,并且仍然是獲取數(shù)據(jù)的最簡單,最可靠的方法之一。
要使用此技術(shù),您需要在MySQL中使用相同或等效的架構(gòu)創(chuàng)建每個(gè)目標(biāo)表。通過右鍵單擊SQL企業(yè)管理器中的“數(shù)據(jù)庫”,然后單擊“任務(wù)”->“生成腳本...”,并為所有表創(chuàng)建一個(gè)SQL腳本,可以做到這一點(diǎn)。然后,您必須手動(dòng)將腳本轉(zhuǎn)換為與MySQL兼容的SQL(這絕對(duì)是工作中最糟糕的部分),并最終在MySQL數(shù)據(jù)庫上運(yùn)行CREATE TABLE命令,以便將表與SQL Server版本進(jìn)行逐列匹配,為空且準(zhǔn)備好數(shù)據(jù)。
然后,從MS-SQL端導(dǎo)出數(shù)據(jù),如下所示。
bcp DatabaseName..TableName out TableName.dat -q -c -T -S ServerName -r \0 -t !\t!
(如果使用的是SQL Server Express,則使用-S值,如下所示:-S“ ComputerName \ SQLExpress”)
這將創(chuàng)建一個(gè)名為TableName.dat的文件,其字段由![tab]分隔!和以\ 0個(gè)NUL字符分隔的行。
現(xiàn)在,將.dat文件復(fù)制到MySQL服務(wù)器上的/ tmp并在MySQL端進(jìn)行加載,如下所示:
LOAD DATA INFILE '/tmp/TableName.dat' INTO TABLE TableName FIELDS TERMINATED BY '!\t!' LINES TERMINATED BY '\0';
不要忘記,表(此示例中的TableName)必須已經(jīng)在MySQL端創(chuàng)建。
在轉(zhuǎn)換SQL模式時(shí),此過程非常麻煩,但是它適用于最困難的數(shù)據(jù),并且由于它使用平面文件,因此您無需說服SQL Server與MySQL對(duì)話,反之亦然。
添加回答
舉報(bào)