导出时需点击数据库名本身并勾选“添加 CREATE DATABASE / USE 语句”,否则默认不生成;字符集需手动补全,导入前应检查用户CREATE权限及SQL模式。
导出时没生成 CREATE DATABASE 语句?检查导出设置里的「数据库」选项
phpmyadmin 默认导出单个数据库时,不会包含 create database 语句——它只从 use `dbname` 开始。关键在导出前是否「选中了数据库本身」,而不是只选中里面的表。
实操建议:
- 在左栏导航树里,**点击数据库名(如
myapp)本身**,让它高亮(不是展开后点某张表) - 顶部点「导出」,确认右上角显示的是「当前数据库:
myapp」,不是「当前表」或「自定义」 - 在「导出方法」选「快速」或「自定义」都行,但必须勾选「添加
CREATE DATABASE/USE语句」(位置在「格式-specific options」下,MySQL 格式才有) - 如果用了「自定义」,还要确保「对象创建选项」里
CREATE DATABASE和DROP DATABASE的勾选符合预期(一般只留前者)
用「服务器」级导出也能带 CREATE DATABASE,但容易多导出不想要的库
如果你在左栏点的是「服务器」(即 phpMyAdmin 登录后的根节点),导出时选「所有数据库」,那每个库都会附带自己的 CREATE DATABASE 语句——但这会把系统库(information_schema、mysql 等)也打包进去,恢复时可能报错或覆盖权限。
实操建议:
- 除非你明确要迁移整套实例,否则别走「服务器 → 导出 → 所有数据库」这条路
- 如果真要多库导出,改用「自定义」→「数据库」框里手动勾选目标库(去掉
performance_schema等) - 注意:即使勾选了「添加
CREATE DATABASE」,phpMyAdmin 对已存在的库默认加IF NOT EXISTS,但不会自动加CHARACTER SET和COLLATE,建库语句可能和原库实际编码不一致
CREATE DATABASE 语句没指定字符集?导出前得先看库的实际 DEFAULT CHARSET
phpMyAdmin 导出的 CREATE DATABASE 语句,默认只写 CREATE DATABASE `myapp`,不带 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci。如果原库用了非默认编码,恢复后新库可能变成 latin1,导致中文乱码。
立即学习“PHP免费学习笔记(深入)”;
实操建议:
- 导出前,先点开该数据库 → 「操作」页,记下「排序规则」旁显示的字符集(如
utf8mb4_unicode_ci) - 导出后手动在 SQL 文件开头补一句:
CREATE DATABASE IF NOT EXISTS `myapp` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; - 或者更省事:用命令行
mysqldump --databases myapp --create-options,它会自动带上完整建库语句(但这就绕开 phpMyAdmin 了)
导入时提示 CREATE DATABASE 被拒绝?检查用户权限和 SQL 模式
即使导出文件里有 CREATE DATABASE,导入时也可能报错:#1044 - Access denied for user 'xxx'@'%' to database 'myapp'。这不是导出问题,而是 MySQL 权限或 SQL 模式限制。
实操建议:
- 确认导入用的账号有
CREATE权限(不只是SELECT/INSERT),执行SHOW GRANTS FOR 'user'@'%';查看 - 如果服务器开了
NO_AUTO_CREATE_USER或STRICT_TRANS_TABLES,某些旧版导出语句可能触发警告;临时关掉再导入(不推荐长期关):SET sql_mode = ''; - 更稳妥的做法:导入前先手动建库(
CREATE DATABASE myapp CHARACTER SET utf8mb4;),再导入时取消勾选「添加CREATE DATABASE」,避免权限冲突
导出带 CREATE DATABASE 的核心就两点:选对导出范围(数据库节点而非表)、勾对选项(「添加 CREATE DATABASE / USE 语句」)。字符集和权限问题往往藏在后面,导完别急着导入,先扫一眼 SQL 文件开头几行。



















