sqlite迁移mysql的若干错误
Posted XiaoYNil
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite迁移mysql的若干错误相关的知识,希望对你有一定的参考价值。
sqlite迁移mysql报错Source data type [DATE] not supported
不论是用Navicat还是MySQL workbench,迁移时碰到表会遇到类似如下错误:
80120001: Source data type [DATE] not supported
大概意思就是数据源中某个字段的DATE型在目标数据库中不支持。
为解决这个问题,采用python的方案进行移植:
import sqlite3
import pandas as pd
from sqlalchemy import create_engine
srcconn = sqlite3.connect('src.db')
dstengine = create_engine('mysql+pymysql://user:pass@localhost/dstdb')
sqlstr = 'select * from tablename'
srcdf = pd.read_sql(sqlstr, srcconn)
srcdf.to_sql('tablename', dstengine, index=True)
以上方案能成功迁移表结构和数据,区别是是部分column的数据类型会改变,比如这里的DATE会被换成TEXT
迁移后group by性能下降
sqlite上在68k数据上处理两个field的group by只需要0.1s不到,但是新数据库中需要118s;
查资料发现可能是数据类型的问题:
[mysql]SQL语句性能优化--Group by中执行慢性能差的原因调查与处理_王德封-逐浪-CSDN博客
于是将TEXT类型换成varchar后,时间确实有明显缩短:0.3s
1406 - Data too long for column at row 1
sqlite的text迁移到MySQL后,存储结构变化很大,严重影响查询性能,所以要将text类型转为varchar,而此处报错,是因为length没有填具体值,导致报错,填写后合适的length值后可正常保存表设计。
以上是关于sqlite迁移mysql的若干错误的主要内容,如果未能解决你的问题,请参考以下文章