sqlserver 中數據導入到mysql中的方法以及注意事項


數據導入從sql server 到mysql (將數據以文本格式從sqlserver中導出,注意編碼格式,再將文本文件導入mysql中):

1、若從slqserver中導出的表中不包含中文采用:

bcp mytest.dbo.test out D:\temp\aa.txt -c -t"\t" –T

bcp "select * from mytest.dbo.test" queryout D:\yucbtemp\aa.tx
t -c -t"\t" –T

-c 是以char存儲字段
-T是采用win嚴重的方式登錄sql server ,如果不用-T 必須指定-U 用戶名 –P密碼 –S 服務器

-t“\t” ,列分隔符
-r”\n” ,行分隔符,默認”\r\n”

此種方式導出的問題,在linux里面認為是ASCII,可以直接load到mysql中去

2、若從slqserver中導出的表中包含中文采用:

sqlcmd -d testDB -E -o "d:\test\aa.txt" -f 65001 -Q "SELECT * FROM testDB..test" -W -w 4000 -s, -h-1

-f :采用utf8-編碼導出數據
-s, :是用逗號進行分隔
-h-1-h和-1之間沒有空格,忽略查詢的表頭
-w:每一列的列寬,太長的列不能采用這樣的方式導出,如果超出設定的值,會被截斷
-E : windows集成驗證模式
-Q:查詢的語句
-o:導出文本路徑
    采用此種方式導出的文本第一行是包含bom的文本,所以第一行導入mysql第一列的值會出錯,需要手動修正第一行的數據。

3、導入到mysql中:

truncate  TABLE `test_tb`;
 LOAD DATA INFILE "test.txt" INTO TABLE test_tb (aaa,bbbb,ccc,xxx);

注意:

文本文件導入到mysql中,文本文件的存放路徑應該是(文本文件的存放路徑):

show variables like 'datadir%'

此外,文本文件中的 \N 代表mysql 中int類型中的null。

 

特:當導出的sqlserver的int型字段中含有NULL時候 ,導出到文本中默認為空,導入到mysql中會判斷成0,此時 需要將sqlserver中字段中值null轉化成非NULL 再導入,之后更新特定非null的值為NULL即可。

--導出(mssql查詢編輯器)
EXEC
master..xp_cmdshell 'BCP "SELECT [my_code],[my_time],isnull([tj],3),isnull([my_type],3) from [myDB].[dbo].[my_log_0]" queryout D:\temp\my_log\my_log_0.txt -c -t"\t" -T'; go
--導入后更新(mysql中)
update my_log_0 set tj = null where tj =3;

 

循環導出bat腳本:

-- for /L %%變量 in (起始值,每次增值,結束時的比較值) do 命令
echo
off for /L %%F IN (1,1,99) DO bcp [myDB].[dbo].[my_log_%%F] out D:\temp\log\my_log_%%F.txt -c -t"\t" -T

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM