mssql2mysql 实战笔记
<div id="cnblogs_post_body"> 工作中有个合并Mssql和Postgresql的数据到Mysql的需求。苦战完毕,记录下来以分享下各种蛋疼~~~Let&lsquo;sgoahead stepbystep。
环境: Win2008 ; Mssql 2008 R2+SP3; Mysql ;
一年之计在于春,立春之日,诸位看官请先设置好mysql的字段类型和字符集( setnames utf-8)
(1) Windows下,Mysql不区分大小写,但是导入导出文件时是区分的。参数lower_case_table_names的值可取 0,1,2。0库名表名区分大小写 ,1库名表名不分大小写 ,2使用指定的大小写, 但显示的时候都显示为小写。 默认状态下 Windows系统下1Linux系统下0 Mac系统下2
(2) Mysql中如果时间字段以Int类型存储通过from_unixtime转换,但是Int是4字节的和东八时区的概念,所以时间范围是1970-01-01 08:00:01到2038-01-19 11:14:07。
俩种方式可以实现:----- 当然肯定有简洁的第三方工具或者更多更好的方法,这里欢迎大家拍砖。
一链接服务器导入导出
1.下载mysqlodbc驱动,安装。
2. MSSQL 创建数据源。需要注意:设置为systemDNS ,characterset为GBK; 否则创建链接服务器时会找不见odbc驱动源和中文字符乱码
3. MSSQL 创建连接服务器,操作mysql语句如下:
(1) select * from openquery(TestMySQL,'select * from test.TestTable');
(2) insert into openquery(TestMySQL,'select * from test.TestTable')select 1,'TestName';
(3) delete from openquery(TestMySQL,'select * from test.TestTable');
(4) update openquery(TestMySQL,'select * from test.TestTable')set TestName='ABCDE' where TestID=1;
ps:此种方法对大数据量来说慢的无法接受,所以大数据的话不推荐使用。
二文件形式导出导入
1. Mssql 通过BCP的方式导出文件
------exec master..xp_cmdshell 'bcp "SELECTREPLACE(REPLACE(Alias,'';'',''\;''),''\'',''\\''), DateDiff(SECOND,''1970-01-01 8:00'',LoginTime) from Demo.dbo.Demo" queryoutD:\demo\demo.txt-t";"-r "\r\n" -c -T';
(1) 利用sql语句对字段NULL值等进行处理,尤其要注意以&ldquo;;&ldquo;作为字段分隔符,中文字段值包含&rdquo;;&ldquo;,末位值是&rdquo;\&ldquo;的情况,可以参考下我的sql。
(2) 导出的文件通过UE工具从ANCI转换为UTF-8
2. Mysql通过loaddata 方式导入文件
-------load data infile 'D:/demo/demo.txt' into table Users character set utf8 fields terminated by ";" escaped by "\\" lines terminated by "\r\n" ;
3.Mysqldump
------mysqldump -uroot -p --default-character-set=utf8 --opt --extended-insert=false --hex-blob --single-transaction -t demo Demo >d:/demo/Demo.sql
三 Postgresql 用copy导出文件
-----COPY (selectid , COALESCE(alias,0),COALESCE(name,0)from demo)TO '/data/demo.sql' DELIMITER ';'null '';
页:
[1]