下列是我从网上搜集并做的一个整理,若有未提及地方请指出:
从 sqlite 数据库导入到 mysql 数据库实例
从 sqllite 中导出数据文件库 XX.sql 的文件。导入到 mysql 数据库中。
键入命令: source /smb/works/mysql.sql
出现很多如下的错误:
You have an error in your SQL syntax; check the manual thatcorresponds to your MariaDB server version for the right syntax to use near XXXXXXXXX
原因是 sqllite 与 mysql 语句有很大的区别:左边为 MYSQL、右边为 SQLite
1、启动事务
Mysql 为 start transaction
Sqlite 为 begin transaction
2、提交事务
Mysql 为 commit
Sqlite 为 commit transaction
因此需要移除所有的 [BEGIN TRANSACTION] [COMMIT] 以及 任何包含 [sqlite_sequence] 的 (整) 行
3 创建表
Mysql 的库名、表名、列明等都不需要使用[]
sqlite 所有的名称都需要增加[]
4、数据类型
sqlite 的数据类型 mysql 都支持。但是 sqlite 中定义了范围在 mysql 中导入会报错。只有 varchar 需要定义范围。
5、冲突解决
SQLite 的 ONCONFLICT 子句不是独立的 SQL 命令。这是一条可以出现在许多其他 SQL 命令中的非标准的子句。在 Mysql 中不支持。
6、引号
将 ["] 改为 [`]
也可以移除全部的 ["] ,但是如果有一些函数名作为字段名 (e.g. regexp) 时将会遇到错误
需要注意一些默认为 ["] ,其作用不在字段上的,不应被替换而应当被保留
7、将所有 [autoincrement] 改为 [auto_increment]
8、将所有 ['f'] 改为 ['0'] 并将所有 ['t'] 改为 ['1']
或者 ['False'] 改为 ['0'] 及 ['True'] 改为 ['1']
9、text 字段不能设置 unipue,需改为 varchar(255)
10、注意 sqlite 是不区分类型的,所以有些整形字段和 text 字段要修改配合 mysql。
11、默认设为 CURRENT_TIMESTAMP 的字段类型一定为 TIMESTAMP。另外还有其他可能不同的字段类型在导入 sql 报错时候可以百度解决
将修改完的 sql 文件保存,然后通过工具导入到 mysql 中即可。
参考原文:https://www.2cto.com/database/201604/501991.html
当然最后来个最简单 sqlite 转 MySQL 方法,可以使用 sqliteToMysql 软件一键转换,只需要选择原 db 地址及目标 MySQL 地址即可,下载链接如下(有内购 不过可以免费试用):
链接:https://pan.baidu.com/s/18mEN4JfHffseYf9N3GCeyA
提取码:9vv9
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。