phpmyadmin 无法直接读取 sqlite .db 文件,因其仅支持 mysql/mariadb 协议;需先用其他工具将 sqlite 转为 mysql 兼容 sql,再清理 pragma、事务语句、insert 格式及转义符后导入,并确保字符集为 utf8mb4。
phpmyadmin 本身不支持直接读取或解析 sqlite 的 .db 文件,它只是一个 mysql/mariadb 的 web 管理界面。所以你不能“用 phpmyadmin 导出 sqlite 结构为 mysql 格式”——这个动作根本不存在。
真正能走通的路径是:先用其他工具把 SQLite 数据库转成 MySQL 兼容的 SQL 文件,再用 phpMyAdmin 导入该文件。
为什么 phpMyAdmin 打不开 .db 文件?
phpMyAdmin 后端只连接 MySQL 协议服务(mysqld 或 mariadbd),它没有 SQLite 解析器,也不识别 .db、.sqlite3 等二进制格式。你尝试拖入或上传 .db 文件,会直接报错或静默失败。
SQLiteStudio 导出的 SQL 文件为什么不能直接导入 phpMyAdmin?
SQLiteStudio 默认导出的是 SQLite 专用语法,常见问题包括:
-
PRAGMA foreign_keys=OFF;—— MySQL 不认识,必须删掉 -
CREATE TABLE t (id INTEGER PRIMARY KEY AUTOINCREMENT)→ MySQL 要写成id INT PRIMARY KEY AUTO_INCREMENT NOT NULL -
TEXT类型没长度,MySQL 允许但部分应用(如 PbootCMS)依赖VARCHAR(255),否则字段被截断 - INSERT 语句用
VALUES (1,'O''Reilly'),其中两个单引号''是 SQLite 转义,MySQL 需要改成'O'Reilly'或用SET SQL_MODE='NO_BACKSLASH_ESCAPES' - 多列
UNIQUE(col1, col2)在老版本 MySQL(如 5.6)中不支持 inline 写法,得改成CONSTRAINT uk_name UNIQUE (col1, col2)
用 phpMyAdmin 导入前,必须手动清理哪些内容?
打开导出的 .sql 文件(UTF-8 编码),做这四件事:
- 删掉所有以
PRAGMA开头的行(共约 4–5 行) - 删掉
BEGIN TRANSACTION;和COMMIT;及中间所有内容(它们对 MySQL 导入无用,反而触发错误) - 把每个
INSERT INTO t VALUES(...)改成显式列名形式:INSERT INTO t (id, name, created_at) VALUES(...)(防止表字段顺序变化导致错位) - 执行全局替换:
''→'(注意是反斜杠+单引号;可用 VS Code 或 Notepad++ 的正则替换:''替换为\')
导入时 phpMyAdmin 报 “Invalid default value for 'xxx'” 怎么办?
这是 MySQL 严格模式(STRICT_TRANS_TABLES)在作怪,常见于 DATETIME 字段默认值为 '' 或 '0000-00-00 00:00:00'。解决方法:
- 找到建表语句中类似
created_at DATETIME DEFAULT ''的字段,改成created_at DATETIME NULL或created_at DATETIME DEFAULT CURRENT_TIMESTAMP - 或者临时关闭严格模式:在 phpMyAdmin 的“SQL”页顶部先执行
SET sql_mode = '';,再点“导入” - 更稳妥的做法是在建表语句末尾加
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci,避免字符集隐式降级
实际操作中最容易被忽略的,是导出文件的编码和 MySQL 连接层的字符集不一致——哪怕 SQL 文件里全是中文,只要 phpMyAdmin 页面顶部显示的“服务器连接的字符集”不是 utf8mb4,导入后查出来就是问号或乱码。务必在导入前点 phpMyAdmin 右上角“设置”→“常规设置”→“服务器连接的字符集”选为 utf8mb4。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











