最常见原因是导入前未在phpmyadmin左侧数据库列表中选中目标库,必须先单击目标库名使其高亮,再点击顶部“导入”标签页,否则即使sql文件含use语句也会报#1046错误。
导入前没选中目标数据库
这是最常见也最容易被忽略的原因。phpmyadmin 的「导入」功能不会自动把 sql 里的 use database_name; 或 create database 语句当作执行指令——它只在你**左侧数据库列表里点选了某个库之后**,才把后续导入操作绑定到那个库上。如果页面左边没点任何数据库,或者点了“phpmyadmin”这类系统库,就会报错 #1046 - no database selected。
实操建议:
- 先在左侧导航栏找到你要导入的目标数据库(比如
myapp),单击选中它(背景变蓝) - 再点顶部「导入」标签页,上传文件
- 如果 SQL 文件开头有
CREATE DATABASE `myapp`,别指望它自动建库并切换过去——必须手动先创建空库,再选中它 - 导出时若用了「导出为自包含文件」选项,可能含
USE `xxx`,但 phpMyAdmin 导入时不执行这行,仅作提示
SQL 文件里 USE 语句指向不存在的库
有些 SQL 文件开头带 USE `old_project`;,而你当前环境根本没有这个库名。phpMyAdmin 不会报“库不存在”,而是直接卡在解析阶段,最终显示“数据库名不正确”或空白错误。
实操建议:
- 用文本编辑器打开 SQL 文件,搜索
USE,确认第一行USE后面的库名是否真实存在 - 如果不存在,删掉整行
USE `xxx`;,或改成你已创建的目标库名 - 更稳妥的做法:把
USE `xxx`;替换成CREATE DATABASE IF NOT EXISTS `xxx` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;,再加一行USE `xxx`; - 注意:不要保留多个
USE语句,尤其不要在文件中间突然切库,phpMyAdmin 不支持跨库混合执行
字符编码导致 USE 语句被截断或误读
如果 SQL 文件带 UTF-8 BOM(字节序标记),phpMyAdmin 读取时可能把开头三个字节 EF BB BF 当作非法字符,导致第一行 USE 被破坏,变成类似 USE `mydb`;,解析失败后就笼统报“数据库名不正确”。
实操建议:
- 用 VS Code、Notepad++ 等编辑器打开 SQL 文件,检查右下角编码显示,如果不是 “UTF-8 without BOM”,就转存为该格式
- 命令行快速检测:
head -c 3 dump.sql | xxd,输出含ef bb bf就说明有 BOM - 批量清除 BOM:
sed -i '1s/^\xEF\xBB\xBF//' dump.sql - 避免用 Windows 记事本保存 SQL 文件——它默认加 BOM
phpMyAdmin 配置限制了默认数据库上下文
极少数定制部署中,管理员禁用了全局数据库选择,或设置了 $cfg['ServerDefault'] 指向一个只读库(如 information_schema)。此时即使你点了左侧库,导入逻辑仍可能 fallback 到默认库,而该库不允许写入,报错就表现为“数据库名不正确”。
实操建议:
- 登录后看浏览器地址栏 URL 是否含
db=your_db_name,没有则说明未真正绑定 - 临时在 SQL 文件最开头加一行:
/* Select database explicitly */,再跟USE `your_db_name`; - 如果是在共享主机环境,联系服务商确认是否锁定了导入上下文——有些托管平台强制所有导入走指定库
真正卡住人的,往往不是语法或权限,而是那个没点一下的数据库名字。它不报错,只沉默;你不点,它就不认。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











