各位万能的V友,请问下 SQLSERER 2005 数据 如何迁移到 Mysql,有什么好的方法么?
目前我想到的方法是:
几点说明:
这样看起来的话,还是有点复杂,而且我还没有尝试将 csv 导入到 mysql,不清楚会不会有中文字符问题,毕竟 Sql server 2005 是 Chinese_PRC_CI_AS,导出后导入 mysql 不一定兼容
求教V友有没有这方面的经验的,指点一二,有什么简单的方法能够完成,而且最好能解决掉中文字符集的问题(存入 Mysql 最好用 utf-8 格式)。
先在此谢谢各位
1
bonfy OP 其实目前的情况是我手边正好也没有 mysql 的数据库(最终是用 mysql ),就先拿 sqlite3 做了下测试
发现成功将 csv 导入到 sqlite3 中了,在 sqlite3 的管理界面里也看到中文数据了,但是用 python peewee 去连 sqlite3 发生了 peewee.OperationalError: Could not decode to UTF-8 column 'name' with text ' \ufffd\ufffd\ufffd\ufffd' 当然这个是 Windows 下的状况,我怀疑是中文字符集问题,当然也可能是 windows 的锅,回去试试 mac 如果有哪位 V 友有经验,请指教一二,谢谢 |
2
zouxy 2016-12-26 17:26:31 +08:00 via iPhone
字段不多的话建议自己写个程序脚本 要转换字符集什么的
现成的工具不一定能满足要求 |
3
shiny 2016-12-26 18:06:47 +08:00 via iPhone
表不多的话,自己写程序更可靠点。
|
4
darrenfang 2016-12-26 18:19:48 +08:00 via iPhone
navicat 有数据同步功能,可以同步 2 个不同的数据库,另外用 navicat 也可以导入 excel
|
5
tuimaochang 2016-12-26 18:43:50 +08:00
|
6
mhycy 2016-12-26 18:51:55 +08:00
都在线的话,写程序搬
无论是 CSV 还是 XLS 都会因为字符串问题一堆坑 PS. 提醒, CSV 是个极其不可靠的格式 |
8
bonfy OP @darrenfang 这个 navicat 有 mac 版么
|
9
keniusahdu 2016-12-26 18:58:32 +08:00
@bonfy 有 mac 版.
|
11
darrenfang 2016-12-26 19:41:33 +08:00 via iPhone
@bonfy 有,但是我没用过 Mac 的数据同步功能,不知道是不是一样的
|
12
em70 2016-12-26 19:42:57 +08:00
SQLSERVER 先转 access,然后用 access 转 mysql 专用工具,效果很好
|
13
bonfy OP @darrenfang @keniusahdu mac 上装了试了一下,没有中文的导入报了两个 error ,不过有数据导入,但是有中文的报了 3 个 error ,没有数据导入。。。还在尝试。。。
|
15
collo 2016-12-26 20:45:13 +08:00
试一下 DB2DB 工具,我上次试了下 MSSQL 转 Sqlite3 效果不错。
不过这个工具收费的。 |
18
bonfy OP |
19
vibbow 2016-12-26 21:04:26 +08:00
M$ Access ,用 ODBC 连接两个数据库。
然后复制粘贴即可...... |
20
foo2bar 2016-12-26 21:54:48 +08:00
这 5 个多小时你一直在折腾数据的导入么?
被这种精神感动,是夏目友人帐的那种感动 |
21
bonfy OP @foo2bar 差不多了
总结下就是工具虽然方便,但是在导入的时候自动判断字段的属性 还有长度 其实大部分时候是错的,调整起来也是真的麻烦 所以如果要多次迁移的话,还是自己写代码保险,一劳永逸; 就一次的话,工具也是可以用用的,但是工具真的也有工具的问题,谁用谁知道啊。。。 |
22
satifanie 2016-12-26 22:07:54 +08:00
你需要的是 Kettle
|
23
DRcoding 2016-12-26 22:18:11 +08:00
kettle 做数据清洗和转移是很方便的,各种方便的组件。
另外,导入数据到 mysql 中最高效的方法是 mysql 的 load 方法,可以先从 mysql 查询数据写到一个文本文件中,然后再 load 进 mysql 当中。 |
24
billlee 2016-12-26 23:09:20 +08:00
SQLite3 管理界面是什么鬼, SQLite 并没有官方 GUI 吧
|
25
bonfy OP |
26
bonfy OP @billee 好吧,我描述有问题, SQLite 命令行界面
$ sqlite3 test.db sqlite> select * from table; 这样是可以看到中文显示,但是用 peewee 读表,就是字符集错误 |
27
realpg 2016-12-27 09:06:58 +08:00
写程序搬,不用任何转换工具
总共的表数如果少,那么直接针对每个表写个搬迁程序,一个表一个 总表如果多,就写一个通用转换读取表 meta 信息的全自动化转 |
28
ebony0319 2016-12-27 09:28:14 +08:00
http://dev.mysql.com/downloads/connector/net/
这是 Mysql 官方的提供的 connector-net 的包。 第一步: ``` select COLUMN_NAME,case when DATA_TYPE='varchar' then DATA_TYPE+'('+CAST(CHARACTER_MAXIMUM_LENGTH as varchar(20))+')' when DATA_TYPE='numeric' or DATA_TYPE='decimal' then DATA_TYPE+'(10,5)' else DATA_TYPE end as 'type' ,CHARACTER_MAXIMUM_LENGTH,* from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='你的表' ``` 然后创建你的 mysql 表 程序迁移。 |
29
sxy707 2016-12-27 11:24:44 +08:00
kettle
|
30
ebony0319 2016-12-27 11:40:24 +08:00
|
33
satifanie 2016-12-27 17:12:00 +08:00
@bonfy 如果数据量不大,可以直接使用向导生成。 如果数据量大,需要用分页支持。请使用 5.x 版本吧。 6.x 7x 资源要的多
|
35
ebony0319 2016-12-27 20:39:42 +08:00 via Android
可以遍历数据库所有表,然后创建表和字段。都在 INFORMATION_SCHEMA.COLUMNS 表里面。
|