导出Sqlite数据库
- 下载
sqlite3
命令行工具,进入命令行 - 切换目录到数据库文件所在目录【把数据库文件拷贝到sqlite3目录下则跳过这步】
注意:在Windows下,目录是用\
,在这里要输入两个\\
,进行转义 - 打开数据库文件,设置导出的文件名,执行导出指令
说明:如果只导出某个表,可以执行.dump table_name
指令,否则就是导出整个数据库 - 得到的文件就是
OrgServer.sql
对导入的sql文件进行整理
- 删除开头如下两行,MySQL不支持这两行代码
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
- 删除最后几个sqlite系统表的相关语句,这几个表是sqlite用来保存我们数据库的一些参数的,和数据库本身无关
ANALYZE sqlite_master;//以下到最后的所有语句
- 修改MySQL不兼容的语法
我遇到的有:
- sqlite的
autoincrement
修改为MySQL的auto_increment
- 某些列名是MySQL的保留字(如用户描述列
describe
,用户是否重复登录列repeat
),需要修改 - sqlite的整数设定长度后并不是固定的,如果长度超过设定值,会自动进行扩展;但是MySQL中整数设定长度后就是固定长度。报错如下:
ERROR 1406 (22001) at line 7229: Data too long for column 'videoIndex' at row 1
- MySQL为了显示中文一般会配置为
utf8
字符集,但是sqlite导出的sql文件默认是系统字符集,所以需要把sql文件另存为utf8
。报错如下:
ERROR 1366 (HY000) at line 27: Incorrect string value: '\xBA\xA3\xBF\xB5RT...' for column 'type' at row 1
- sqlite的varchar长度可以很大,比如65535;但是MySQL中最长21845,需要改为BLOB或TEXT类型。报错如下:
ERROR 1074 (42000) at line 7834: Column length too big for column 'infos' (max = 21845); use BLOB or TEXT instead
补充:在修改MySQL的字符集是UTF8的时候,我很自然的输入了utf-8
,结果重启MySQL服务报错,如下:
C:\Users\Administrator>"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80 --console
mysqld: Character set 'UTF-8' is not a compiled character set and is not specified in the 'C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\Index.xml' fil
e
2019-07-23T05:55:35.604384Z 0 [Warning] [MY-011071] [Server] option 'read_buffer_size': unsigned value 0 adjusted to 8192
2019-07-23T05:55:35.604384Z 0 [Warning] [MY-011071] [Server] option 'read_rnd_buffer_size': unsigned value 0 adjusted to 1
2019-07-23T05:55:35.604384Z 0 [Warning] [MY-010915] [Server] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with st
rict mode. They will be merged with strict mode in a future release.
2019-07-23T05:55:35.607384Z 0 [System] [MY-010116] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.12) starting as process 11628
2019-07-23T05:55:35.631386Z 0 [ERROR] [MY-010119] [Server] Aborting
2019-07-23T05:55:35.633386Z 0 [System] [MY-010910] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe: Shutdown complete (mysqld 8.0.12) MySQL Com
munity Server - GPL.
按提示找到Index.xml
文件一看,是UTF8
,改了以后成功启动服务。
导入数据
对SQL文件整理完后,按照日常导入MySQL即可。