求助: SQLSERVER 2005 迁移到 Mysql 的解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
bonfy
V2EX    程序员

求助: SQLSERVER 2005 迁移到 Mysql 的解决方案

  •  
  •   bonfy 2016-12-26 16:41:29 +08:00 4126 次点击
    这是一个创建于 3218 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位万能的V友,请问下  SQLSERER 2005 数据 如何迁移到 Mysql,有什么好的方法么?

    目前我想到的方法是:

    1. 导出 excel (.xls)
    2. 用 csvkit 将 xls 转成 csv
    3. 将 csv 导入到 mysql  (第三步还没实践)

    几点说明:

    • 关于不用导入导出向导->导出 dsn? 后来查了才知道的,也不知道靠谱不,不确定,用过的可以为之正名
    • 关于为什么要先导出 excel 转成 csv? 因为 数据里面有",",我已经尝试过了会有点问题
    • 关于 csvkit? Python 的一个比较好用的工具,效果不错,地址https://github.com/wireservice/csvkit

    这样看起来的话,还是有点复杂,而且我还没有尝试将 csv 导入到 mysql,不清楚会不会有中文字符问题,毕竟 Sql server 2005 是 Chinese_PRC_CI_AS,导出后导入 mysql 不一定兼容

    求教V友有没有这方面的经验的,指点一二,有什么简单的方法能够完成,而且最好能解决掉中文字符集的问题(存入 Mysql 最好用 utf-8 格式)。

    先在此谢谢各位

    35 条回复    2016-12-27 20:39:42 +08:00
    bonfy
        1
    bonfy  
    OP
       2016-12-26 16:51:46 +08:00
    其实目前的情况是我手边正好也没有 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 友有经验,请指教一二,谢谢
    zouxy
        2
    zouxy  
       2016-12-26 17:26:31 +08:00 via iPhone
    字段不多的话建议自己写个程序脚本 要转换字符集什么的
    现成的工具不一定能满足要求
    shiny
        3
    shiny  
       2016-12-26 18:06:47 +08:00 via iPhone
    表不多的话,自己写程序更可靠点。
    darrenfang
        4
    darrenfang  
       2016-12-26 18:19:48 +08:00 via iPhone
    navicat 有数据同步功能,可以同步 2 个不同的数据库,另外用 navicat 也可以导入 excel
    tuimaochang
        5
    tuimaochang  
       2016-12-26 18:43:50 +08:00
    mhycy
        6
    mhycy  
       2016-12-26 18:51:55 +08:00
    都在线的话,写程序搬
    无论是 CSV 还 XLS 都会因为字符串问题一堆坑

    PS. 提醒, CSV 是个极其不可靠的格式
    bonfy
        7
    bonfy  
    OP
       2016-12-26 18:57:32 +08:00
    @zouxy @shiny 嗯 正在自己码,就是累啊,想想如果有现成的轮子可以省好多时间
    bonfy
        8
    bonfy  
    OP
       2016-12-26 18:58:02 +08:00
    @darrenfang 这个 navicat 有 mac 版么
    keniusahdu
        9
    keniusahdu  
       2016-12-26 18:58:32 +08:00
    @bonfy 有 mac 版.
    bonfy
        10
    bonfy  
    OP
       2016-12-26 19:00:32 +08:00
    @mhycy 是啊,已感受 csv 。。。又要面对这些字符集大坑,抓狂
    darrenfang
        11
    darrenfang  
       2016-12-26 19:41:33 +08:00 via iPhone
    @bonfy 有,但是我没用过 Mac 的数据同步功能,不知道是不是一样的
    em70
        12
    em70  
       2016-12-26 19:42:57 +08:00
    SQLSERVER 先转 access,然后用 access 转 mysql 专用工具,效果很好
    bonfy
        13
    bonfy  
    OP
       2016-12-26 20:21:44 +08:00
    @darrenfang @keniusahdu mac 上装了试了一下,没有中文的导入报了两个 error ,不过有数据导入,但是有中文的报了 3 个 error ,没有数据导入。。。还在尝试。。。
    bonfy
        14
    bonfy  
    OP
       2016-12-26 20:22:40 +08:00
    @em70 还要转 access....又要装一个微软的东东...
    collo
        15
    collo  
       2016-12-26 20:45:13 +08:00
    试一下 DB2DB 工具,我上次试了下 MSSQL 转 Sqlite3 效果不错。

    不过这个工具收费的。
    em70
        16
    em70  
       2016-12-26 20:47:37 +08:00
    @bonfy sqlserver 自带转 access 的功能吧
    bonfy
        17
    bonfy  
    OP
       2016-12-26 20:56:11 +08:00
    @em70 哦,你说的是导出 access...了解了,刚才理解错了 ;这个可以试试:)
    bonfy
        18
    bonfy  
    OP
       2016-12-26 20:59:12 +08:00
    @darrenfang @keniusahdu

    有进展了,从 xls 直接导入 navicat 有问题。不过我先转成 csv,然后改了下字段长度,终于成功导入了中文。
    vibbow
        19
    vibbow  
       2016-12-26 21:04:26 +08:00
    M$ Access ,用 ODBC 连接两个数据库。
    然后复制粘贴即可......
    foo2bar
        20
    foo2bar  
       2016-12-26 21:54:48 +08:00
    这 5 个多小时你一直在折腾数据的导入么?
    被这种精神感动,是夏目友人帐的那种感动
    bonfy
        21
    bonfy  
    OP
       2016-12-26 22:04:11 +08:00
    @foo2bar 差不多了

    总结下就是工具虽然方便,但是在导入的时候自动判断字段的属性 还有长度 其实大部分时候是错的,调整起来也是真的麻烦

    所以如果要多次迁移的话,还是自己写代码保险,一劳永逸; 就一次的话,工具也是可以用用的,但是工具真的也有工具的问题,谁用谁知道啊。。。
    satifanie
        22
    satifanie  
       2016-12-26 22:07:54 +08:00
    你需要的是 Kettle
    DRcoding
        23
    DRcoding  
       2016-12-26 22:18:11 +08:00
    kettle 做数据清洗和转移是很方便的,各种方便的组件。

    另外,导入数据到 mysql 中最高效的方法是 mysql 的 load 方法,可以先从 mysql 查询数据写到一个文本文件中,然后再 load 进 mysql 当中。
    billlee
        24
    billlee  
       2016-12-26 23:09:20 +08:00
    SQLite3 管理界面是什么鬼, SQLite 并没有官方 GUI 吧
    bonfy
        25
    bonfy  
    OP
       2016-12-27 08:13:30 +08:00
    @satifanie @DRcoding 嗯,反正都已经折腾到现在了, Kettle 我也一并去试试看吧。。。或许有惊喜呢
    bonfy
        26
    bonfy  
    OP
       2016-12-27 08:15:58 +08:00
    @billee 好吧,我描述有问题, SQLite 命令行界面

    $ sqlite3 test.db
    sqlite> select * from table;

    这样是可以看到中文显示,但是用 peewee 读表,就是字符集错误
    realpg
        27
    realpg  
    PRO
       2016-12-27 09:06:58 +08:00
    写程序搬,不用任何转换工具
    总共的表数如果少,那么直接针对每个表写个搬迁程序,一个表一个
    总表如果多,就写一个通用转换读取表 meta 信息的全自动化转
    ebony0319
        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 表

    程序迁移。
    sxy707
        29
    sxy707  
       2016-12-27 11:24:44 +08:00
    kettle
    ebony0319
        30
    ebony0319  
       2016-12-27 11:40:24 +08:00
    https://drive.google.com/file/d/0B8gkQ67RbZnuQ2JNNWk5VFFFbzg/view

    随便写的,你可以稍微改一下。实测可以。
    bonfy
        31
    bonfy  
    OP
       2016-12-27 12:43:21 +08:00
    @ebony0319 要下班后回家才能翻 qiang ,回去再看,先行谢过。
    bonfy
        32
    bonfy  
    OP
       2016-12-27 12:43:42 +08:00
    @sxy707 软件要 800M ,回去再下载试试
    satifanie
        33
    satifanie  
       2016-12-27 17:12:00 +08:00
    @bonfy 如果数据量不大,可以直接使用向导生成。 如果数据量大,需要用分页支持。请使用 5.x 版本吧。 6.x 7x 资源要的多
    bonfy
        34
    bonfy  
    OP
       2016-12-27 20:09:55 +08:00
    @ebony0319 哇塞,整一个项目工程啊,慢慢看。。。
    ebony0319
        35
    ebony0319  
       2016-12-27 20:39:42 +08:00 via Android
    可以遍历数据库所有表,然后创建表和字段。都在 INFORMATION_SCHEMA.COLUMNS 表里面。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     861 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:57 PVG 05:57 LAX 14:57 JFK 17:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86