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的若干错误的主要内容,如果未能解决你的问题,请参考以下文章

sqlite迁移mysql的若干错误

sqlite迁移mysql的若干错误

带有 Sqlite 错误的 Laravel 迁移:typeSet 不存在

数据从sqlite3迁移到mysql中遇到的问题

在 Django 中将 SQLite3 数据库迁移到 MySQL

MySQL 迁移至 SQLite 问题记录