话说,今天给自己找了个事,要把一个数据量比较大的巨硬的SQL Server中的数据导入到MySQL中。
话说这数据量有多大呢?bak备份文件就有187M,数据库的表有90万行的数据。
那导入就导入呗,怎么来呢……
从MSSQL中导出sql脚本
似乎这是个放之四海而皆准的原则,咱都这么干。于是……
任务-生成脚本,高级中把“仅限架构”改成架构和数据。
嗯,静静等待导出……
唔,1.13G的脚本,估计导回到MySQL里……反正我做完饭刷完碗洗完澡了还没导完。别想了,数据量小的话还可以玩玩,这么大,放弃吧。
MySQL Migration Toolkit
别想了,这玩意早就停止维护了。就算用的成也一堆bug的吧。
哥哥,我真的有JRE的……
导出成csv,用MySQL Front导入
任务-导出数据,目标选择"平面文件目标",在第一行显示列名称
然后打开MySQL Front输入 - csv文件,飞快的导入,好像没什么问题?然而并没有。
用phpmyadmin?别想了,PHP默认有上传文件大小限制,phpmyadmin本身也有,就算这俩都不是问题,Nginx还不乐意给了5xx报错呢。
别用MySQL Front试了,我改了各种编码格式,从utf-8到gbk到gb2312,全完蛋。
导出成Excel
那试试导出成Excel?
报错,一堆看不懂的错误提示。
打开Excel一看,65535……下一个应该溢出了啊,?回负数了啊
SQL Server直接导出到MySQL
看样子很牛逼哈,当然要先安装MySQL的.Net驱动程序哈。然后任务-导出,目标选择MySQL,大概像下图这样:
然后下一步……
巨硬你是我爹还不行嘛……
行了,我还是说两种可行的方案吧。
方案一:MySQL Workbench
下载MySQL Migration Toolkit的时候,官方告诉我,这玩意停止开发啦,去用MySQL Workbench吧。好,那好吧。当然要提前下载好MySQL的ODBC驱动啊。
没错,Database – Migration Wizard,你是巫师也没用啊(☆-v-)
Source选择MS SQL,Connection Method选择ODBC(native)
目标就选择MySQL,很简单的设置。然后下一步选择数据库,一路下一步基本上……有的时候,你会卡在这:
不知道为啥这三个小圈圈都是空白的,没办法下一步。我保证test connection是没有问题的!(你信吗)
有的时候通过了,下一步到某个步骤时……可能会报各种奇怪的错误!忘记截图了。至少我第一次的时候各种报错……
好吧,其实我想说的是,这个Workbench其实是能用的,就是某一步不小心弄错了的话,就会失败,而且报错看不明白……
你看这不就在导入呢么……
用JetBrains全家桶的数据库工具导入csv文件
打开一个JetBrains的IDE(要Professional的哦),view-toolbox-database,添加MySQL数据源。
新建一个schema,右键-import data from file,选择我们的csv文件
之后出现窗口让我们定义这个表格的数据类型啊、列名什么的,列名双击可以更改数据类型,上下移动以及映射之后的列名。
推荐大家把write errors选中,这样如果出错,可以看日志。
之后ok导入,速度还可以哈。
但是你看,最后我这里报错了,说这个类型无法转换成float,估计PyCharm是根据csv里第一列的数据来决定导入之后的每一列使用什么类型,于是就给某列判断成了float,没想到后面我的某个数据不是全数字的而带上了字母。
那就在上上个图里给Type改成Text或者varchar什么的就好啦(可以参考源数据库)
总结
JetBrains的database工具真的是太好用了,支持很多数据库,功能也很强大,容错能力也很强。还要什么管理工具啊,有个它就完全足够了。
如果你是学生有edu邮箱,快申请免费使用;
如果你在大公司工作(尤其是外企),跟老板要去;
如果你有钱,自己花钱订阅;
如果你没有edu邮箱,老板不给买,还穷,那就很不地道的改时间骗骗JetBrains、用License Server激活吧。可不,我这一天都在尝试着把Java版的JetBrains License Server port到Python,然而怎奈学艺不精,原理都搞清楚了,就是跑不过测试用例……???
<script>alert('null')</script>
,navicat没有试过,不知道可行性怎样,隐隐约约感觉……还是JetBrains全家桶好:-)