mssql2mysql 实战笔记

    工作中有个合并Mssql和Postgresql的数据到Mysql的需求。苦战完毕,记录下来以分享下各种蛋疼~~~

    Let‘s  go  ahead step  by  step。

    环境: Win2008 ; Mssql 2008 R2+SP3; Mysql ;

    一年之计在于春,立春之日,诸位看官请先设置好mysql  的字段类型和字符集( set  names utf-8)

   (1) Windows下,Mysql不区分大小写,但是导入导出文件时是区分的。参数lower_case_table_names的值可取 0,1,2。0库名表名区分大小写 ,1库名表名不分大小写 ,2使用指定的大小写, 但显示的时候都显示为小写。 默认状态下 Windows系统下1  Linux系统下0   Mac系统下2

   (2) Mysql中如果时间字段以Int类型存储通过from_unixtime转换,但是Int是4字节的和东八时区的概念,所以时间范围是1970-01-01 08:00:01到2038-01-19 11:14:07。

 

俩种方式可以实现:----- 当然肯定有简洁的第三方工具或者更多更好的方法,这里欢迎大家拍砖。

一  链接服务器导入导出

1.  下载mysql  odbc驱动,安装。

2.   MSSQL 创建数据源。需要注意:设置为system  DNS ,character  set  为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 "SELECT  REPLACE(REPLACE(Alias,'';'',''\;''),''\'',''\\''), DateDiff(SECOND,''1970-01-01 8:00'',LoginTime) from Demo.dbo.Demo"   queryout  D:\demo\demo.txt  -t";"  -r "\r\n" -c -T';

(1) 利用sql语句对字段NULL值等进行处理,尤其要注意以  “;“作为字段分隔符,中文字段值包含”;“,末位值是”\“的情况,可以参考下我的sql。

(2) 导出的文件通过UE工具从ANCI转换为UTF-8

2. Mysql  通过load  data 方式导入文件

-------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 (select  id , COALESCE(alias,0),COALESCE(name,0)  from demo)  TO '/data/demo.sql' DELIMITER ';'  null '';

 

 

 

posted @ 2012-12-21 16:18  莫问前程  阅读(638)  评论(0编辑  收藏  举报