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值后可正常保存表设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值