有时需要把MS SQL数据库转换成MySQL,但苦于没有好用的工具,个人使用一个手工转换的方法,相对来说还是比较方便的,对于只导一两个表的时候。
思想:
通过mssql构造出MySQL的insert into 语句,保存到一个文本文件里,然后导入MySQL数据库。
方法扼要如下:
1.根据ms sql表结构同步创建出mysql表,可以使用mssql客户端工具生成mssql的建表语句,里面一般来说会带上COLLATE Chinese_PRC_CI_AS 及 CONSTRAINT [DF_xxx_xxx] 这样的部分,对mysql是没有用的,使用ue的查找替换功能将其删掉,替换“CONSTRAINT [DF_xxx_xxx] ”要使用正则表达式匹配 CONSTRAINT.*?]
2.将简化后的create table ... 语句改写成适合MySQL的建表语句,主要是字段类型的相应修改(mysql里没有nvarchar等以n打头的类型)、方括号替换成反引号、删掉mssql标识列定义等。
3.MySQL里执行create table建表。
4.回到mssql里,对每个文本型字段执行一次字符串替换,将单引号替换成mysql风格的转义符( '),语句大致如下:
update you_table_name set [field_name_1]=replace([field_name_1],'''','''')
里面mssql的单引号转义是两个单引号,所以看起来相当别扭,顺便逼视一下MS的脑残转义约定。
5.将mssql表里的非字符型字段改成字符型,当然不改也行,只是下面一步会很痛苦。
6.按下来我们要构造一系列用于把mssql记录插入MySQL表的insert 语句,
7.我们要在mssql里拼接字符串的形式构造该查询语句 select top 100 'inset into `you_table_name`(`field_name_1`,`field_name_2`,...)values('''+[field_name_1]+''','''+convert(varchar(10),isnull([field_name_2],0))+''',...);' from you_mssql_table
从这个语句里可以看出,如果是字符型字段,像field_name_1,直接使用mssql拼接符(+)连起来就可以了,但如果是数字型或日期型字段,像`field_name_2`,就要convert做转换了,日期型还要加上第三个参数,如convert(varchar(10),time,120)这样写。
我们可以先对前100条构造出适合MySQL的insert语句,随机复制几条到MySQL里测试是否可以正常插入。
8.确认无误后,从mssql里导出数据的方式,将上面的查询导出成access数据库文件,再从access中导出文本文件(也可以直接从mssql里导出文本),通常mssql导出的文本文件是ansi编码的,我们可以使用editplus之类工具打开并另存为utf-8编码。不推荐使用ue转换,经验教训表明ue转换编码容易出错。
9.进入mysql命令行客户端里,注意加上--default-character-set=utf8参数,否则很可能导入一团乱码
>mysql -uroot -p --default-character-set=utf8
10.进入相应数据库use you_database
11.执行source X:pathtoyoursqlfile.sql
应该很快可以完成,导入时可以注意一下是否有错误提示。通常不会有的。
12.至此转换完成。
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔