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

 

转载于:https://www.cnblogs.com/lx823706/p/6211645.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值