为什么宝塔面板数据库迁移后中文乱码_对比两端字符集排序规则设置

风静吖_3652

风静吖_3652

2026-04-29

1048人浏览

原创

导出时必须显式指定--default-character-set=utf8mb4,否则mysqldump按server默认字符集(如latin1)输出,导致SET NAMES语句错误引发乱码;导入时也须强制连接编码为utf8mb4,且需验证CHARSET()和COLLATION()结果。

为什么宝塔面板数据库迁移后中文乱码_对比两端字符集排序规则设置

导出时没锁定字符集,dump 文件自带 latin1 头

mysqldump 默认按服务器 character_set_server 编码输出 SQL,宝塔装的 MySQL 往往默认是 latin1 或 utf8(即 utf8mb3),哪怕库和表本身已是 utf8mb4,导出的 SQL 文件开头仍可能是:

SET NAMES latin1;

或

/*!40101 SET NAMES utf8 */;

。这种语句会让导入端按错误编码解析后续中文,直接导致乱码。

实操建议:

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • 导出时必须显式指定 --default-character-set=utf8mb4,例如:
    mysqldump -u root -p --default-character-set=utf8mb4 your_db > backup.sql
  • 避免用 phpMyAdmin 图形界面“导出”,它常忽略连接层实际 charset,优先用命令行
  • 检查 dump 文件前 20 行,确认有
    SET NAMES utf8mb4;
    而非其他值

导入时没强制指定连接编码,MySQL 按旧配置执行

即使 dump 文件正确,如果导入时连接未设为 utf8mb4,MySQL 仍会把文件里的中文当 latin1 解析——比如把两个字节的 UTF-8 中文拆成两个乱码字符。

实操建议:

  • 不要用 mysql -u root -p your_db 这种裸命令,它不带 charset 声明
  • 改用:
    mysql -u root -p --default-character-set=utf8mb4 your_db 
  • 若用 phpMyAdmin 导入,先在首页右上角点「导入」→ 展开「格式特定选项」→ 把「字符集」下拉框手动选为 utf8mb4
  • 导入后立刻执行 SELECT CHARSET(), COLLATION(); 确认当前会话编码

两端 collation 不一致,ORDER BY 或 WHERE LIKE 结果异常

字符集相同但校对规则不同(如一端用 utf8mb4_unicode_ci,另一端用 utf8mb4_general_ci),虽不直接导致存取乱码,但会影响中文排序、大小写匹配、重音符号处理。例如 WHERE name LIKE '%张%' 在 _general_ci 下可能漏匹配带变音的「張」。

实操建议:

  • 迁移前后都执行:
    SHOW CREATE DATABASE your_db;
    和
    SHOW CREATE TABLE your_table;
    ,比对 COLLATE 字段是否完全一致
  • 建库时统一用:
    CREATE DATABASE `your_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 已有库可修正:
    ALTER DATABASE `your_db` COLLATE = utf8mb4_unicode_ci;
    (注意:仅改库 collation 不影响已有表,表需单独改)

PHP 连接层仍走默认编码,查出来还是问号

数据库和 dump 都对了,但 PHP 页面显示仍是问号或方块——大概率是应用连接 MySQL 时没声明 utf8mb4,连接层仍在用 latin1 解析字段值。

实操建议:

  • mysqli 方式:连接后**立刻**调用 $mysqli->set_charset("utf8mb4"),不能只靠 DSN 里写 charset=utf8
  • PDO 方式:DSN 必须含 ;charset=utf8mb4,且不能被 PDO::MYSQL_ATTR_INIT_COMMAND 覆盖
  • 验证是否生效:在查询前执行 $pdo->query("SELECT CHARSET(), COLLATION()")->fetch(),结果应为 utf8mb4 和 utf8mb4_unicode_ci
  • 别信 phpinfo() 里的 default_charset,它只管 HTTP header,跟 MySQL 无关

字符集迁移不是“改完库就完事”的单点操作,导出、导入、连接三者缺一不可;collation 差异虽不引发乱码,但会让中文逻辑行为飘忽不定——这点最容易被跳过验证。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

宝塔面板 中文乱码

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
常用的mysql管理工具
常用的mysql管理工具

常用的mysql管理工具有:1、MySQL Workbench、phpMyAdmin、MySQL Shell、Navicat、DBeaver和DataGrip。更多关于mysql管理工具的问题,详情请看本专题下面的文章,php中文网欢迎大家前来学习。

2023.11.03

6050

11

phpmyadmin导入sql文件失败怎么办
phpmyadmin导入sql文件失败怎么办

在phpmyadmin导入sql文件失败时,可以尝试以下解决方案:1、检查文件权限和格式;2、确保文件字符集与数据库兼容;3、确认表结构兼容;4、检查外键约束和禁用外键检查;5、增加最大上传文件大小;6、分批导入或使用命令行导入;7、联系托管提供商寻求帮助。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

3804

7

phpmyadmin怎么改成中文
phpmyadmin怎么改成中文

通过安装中文语言包、将其上传到 phpmyadmin 目录、修改配置文件和重启 phpmyadmin,可以将 phpmyadmin 的界面改为中文。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

841

5

phpmyadmin访问不了怎么回事
phpmyadmin访问不了怎么回事

phpmyadmin 无法访问可能是以下原因造成:1、服务器问题:mysql 服务未运行或防火墙阻止访问;2、配置问题:安装/配置错误、错误的配置文件设置或缺少必要的 php 扩展;3、浏览器问题:浏览器缓存、扩展干扰或浏览器不兼容;4、其他原因:dns 问题、恶意软件或网络连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

939

6

phpMyAdmin安装教程大全
phpMyAdmin安装教程大全

本专题整合了phpMyAdmin程序安装相关教程,阅读专题下面的文章了解更多详细内容。

2025.10.31

925

23

PHPMyadmin配置
PHPMyadmin配置

本专题整合了phpmyadmin配置相关教程,阅读专题下面的文章了解更多详细步骤。

2025.12.04

569

19

XAMPP 与 phpMyAdmin 数据库管理实操
XAMPP 与 phpMyAdmin 数据库管理实操

专注于 XAMPP 内置的 phpMyAdmin 数据库管理工具,系统讲解数据库和数据表的创建与设计、SQL 语句执行、CSV/SQL 格式数据的导入导出、定时备份与一键还原、多数据库批量管理等日常操作,帮助开发者高效管理本地 MySQL 数据。

2026.04.08

355

26

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

60

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

40

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
宝塔入门指引手册
宝塔入门指引手册

共0课时 | 0人学习

宝塔官方实践教程
宝塔官方实践教程

共0课时 | 0人学习