3 回答

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

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