当前位置: 首页 > news >正文

sqlite数据库整体迁移进mysql整个流程并解决中文异常问题

咨询+【QQ】

sqlite轻量数据还行,随着数据量增大,不得不迁移进mysql

首先 电脑执行
 

sqlite3 db.sqlite3 .dump > dump.sql

会把整个sqlite的数据导出进 dump.sql中

紧接着我们把sqlite的sql转换成mysql的sql语句,因为mysql语句和 sqlite的sql有区别,所以我们需要用python实现一个转换脚本

import redef convert_sqlite_to_mysql(sql):# 移除 PRAGMA 语句sql = re.sub(r'PRAGMA .*?;', '', sql)# 修改 BEGIN TRANSACTION 为 START TRANSACTIONsql = sql.replace('BEGIN TRANSACTION;', 'START TRANSACTION;')# 替换 COMMIT TRANSACTION 为 COMMITsql = sql.replace('COMMIT;', 'COMMIT;')# 替换 ROLLBACK TRANSACTION 为 ROLLBACKsql = sql.replace('ROLLBACK;', 'ROLLBACK;')# 修改 AUTOINCREMENT 为 AUTO_INCREMENTsql = sql.replace('AUTOINCREMENT', 'AUTO_INCREMENT')# 替换数据类型sql = sql.replace('INTEGER', 'INT')sql = sql.replace('TEXT', 'VARCHAR(255)')# 替换双引号为反引号sql = sql.replace('"', '`')# 添加 CHARACTER SET utf8mb4 到表定义中sql = re.sub(r'CREATE TABLE `(.*?)` \(', r'CREATE TABLE IF NOT EXISTS `\1` (', sql)# sql = re.sub(r'\);', r') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;', sql)# 处理 INSERT 语句,确保数据字符集正确sql = re.sub(r'INSERT INTO `(.*?)` \((.*?)\) VALUES', r'INSERT INTO `\1` (\2) VALUES', sql)sql = re.sub(r'INSERT INTO `sqlite_sequence`.*?;', '', sql)return sql# 读取原始的 SQLite dump 文件
with open('dump.sql', 'r', encoding='utf-8') as file:sql_dump = file.read()# 转换为 MySQL 兼容的 SQL
mysql_compatible_sql = convert_sqlite_to_mysql(sql_dump)# 将转换后的 SQL 写入新的文件
with open('dump_mysql.sql', 'w', encoding='utf-8') as file:file.write(mysql_compatible_sql)print("SQL conversion complete. Please check 'dump_mysql.sql' for MySQL import.")

执行py脚本生成dump_mysql.sql

这样就转换好了,紧接着进入mysql创建数据库 mydatabase

CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE mydatabase;

去mysql安装目录,执行。linux直接执行此命令就行

mysql -u root -p mydatabase < dump_mysql.sql#如果遇到中文报错\u等报错,数据导入的时候就需要用一下命令,指定字符集导入进mysqlmysql --default-character-set=utf8mb4 -u root -p mydatabase < dump_mysql.sql

然后输入mysql对应的密码,就行了

等待数据转存完,就行了。可能会报一个  sqlite_sequence 之类的异常,并不影响数据。至此就行了

http://www.lryc.cn/news/376874.html

相关文章:

  • Hadoop3:MapReduce中的Partition原理及自定义Partition
  • 就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂
  • STM32学习记录(八)————定时器输出PWM及舵机的控制
  • Vue CLI,Vue Router,Vuex
  • 互联网广告相关概念
  • 如何在服务器上部署一个java程序
  • 白酒:中国的酒文化的传承与发扬
  • 算法金 | 再见!!!梯度下降(多图)
  • python Django安装及怎么检测是否安装成功
  • Swift开发——存储属性与计算属性
  • 如何解决input输入时存在浏览器缓存问题?
  • Java基础学习-方法
  • Ribbon与Nginx的区别
  • R包开发详细教程
  • 图像的高频和低频细节
  • PostgreSQL源码分析——常量表达式化简
  • 速卖通自养号测评:安全高效的推广手段
  • 项目监督与控制
  • 【LeetCode刷题】面试题 17.19. 消失的两个数字
  • 如何定制Spring的错误json信息
  • 【第20章】Vue实战篇之Vue Router(路由)
  • 阿里云运维第一步(监控):开箱即用的监控
  • Python量化交易学习——Part7:定制增强型中证红利策略
  • 拥抱未来:探索改变游戏规则的新存储技术
  • shell中的流程控制
  • DiffIR: Efficient Diffusion Model for Image Restoration
  • xss一些笔记
  • 以太坊网络中为什么要设置Gas上限
  • vue-cli是什么?和 webpack是什么关系?
  • leetcode刷题(46-50)