跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

为什么宝塔面板网站数据库导入新站后出现中文乱码_严格校对导出与导入时的字符集编码是否一致

导出SQL文件时未指定--default-character-set=utf8mb4会导致中文乱码,因mysqldump默认使用latin1或utf8mb3;导入时宝塔界面字符集选错(如留空或选UTF8)亦致乱码,须明确选utf8mb4并配合--skip-set-charset导出及--default-character-set=utf8mb4导入。 导出 SQL 文件时没指定
--default-character-set=utf8mb4
宝塔默认用
mysqldump
导出,但不加字符集参数时,它会按 MySQL 服务端的
character_set_database
或连接默认值来处理——这经常是
latin1
或旧版
utf8
(即
utf8mb3
),导致中文被错误 编码 成乱码字节后写入文件。 实操建议: 导出前先查源库实际字符集:
SHOW CREATE DATABASE `your_db`;
和
SHOW CREATE TABLE `your_table`;
,确认
CHARACTER SET
是
utf8mb4
用命令行导出,显式指定编码:
mysqldump -u root -p --default-character-set=utf8mb4 --skip-set-charset your_db > backup.sql
务必加
--skip-set-charset
:否则
mysqldump
会在 SQL 文件开头硬写
SET NAMES latin1
类语句,覆盖后续导入时的编码设置 导入时未在 phpMyAdmin 或宝塔「数据库管理」中选择正确编码 宝塔后台的数据库导入界面有个下拉框叫「字符集」,很多人直接留空或选了
UTF8
(其实是
utf8mb3
),而目标库是
utf8mb4
。这时 phpMyAdmin 会以错误编码解析 SQL 流,把原本正确的
utf8mb4
字节当
latin1
重解,结果就是问号、 Mojibake 或双问号(如 )。 实操建议: 导入前,在宝塔数据库管理页点「导入」,下拉菜单必须选
utf8mb4
(不是
UTF8
,也不是留空) 如果已导入出错,别反复导入覆盖——数据已损坏。应删库重建,再按正确流程重导重入 用命令行导入更可控:
mysql -u root -p --default-character-set=utf8mb4 your_new_db
目标数据库/表的字符集仍是
latin1
或
utf8
即使 SQL 文件内容正确,如果新库或表的默认字符集没设对,MySQL 插入时仍会按旧编码存储。典型表现是:字段显示正常,但搜索中文查不到;或者 phpMyAdmin 看着是中文,网页输出却是乱码。 React Native For Android 源码编译 中文WORD版 本文档主要讲述的是React Native For Android 源码编译;希望对大家会有帮助;感兴趣的朋友可以过来看看 下载 实操建议: 建库时就指定:
CREATE DATABASE `new_db` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
已有库可修改:
ALTER DATABASE `new_db` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
已有表也得改:
ALTER TABLE `your_table` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
检查是否生效:
SHOW VARIABLES LIKE 'character_set%';
和
SHOW VARIABLES LIKE 'collation%';
,重点看
character_set_database
和
character_set_server
PHP 连接层没声明
utf8mb4
,导致读取时二次转码 网站能打开但中文显示异常?可能是 PHP 的 MySQLi 或 PDO 连接没设对编码。比如用
mysqli_set_charset($conn, 'utf8')
,这个
utf8
在新版 MySQL 中等价于
utf8mb3
,无法正确读取
utf8mb4
存储的四字节 emoji 或某些生僻汉字。 实操建议: PDO 连接字符串加
;charset=utf8mb4
:
$pdo = new PDO("mysql:host=localhost;dbname=your_db;charset=utf8mb4", $user, $pass);
MySQLi 连接后立即执行:
mysqli_set_charset($conn, 'utf8mb4');
检查 PHP 配置中的
mysql.default_charset
(已废弃)或
mysqli.default_charset
,设为
utf8mb4
关键点其实就一个:从导出、建库、导入到 PHP 连接,
utf8mb4
必须贯穿始终。漏掉任意一环,中文就可能在某个环节被截断、误判或重编码。尤其注意宝塔界面里那个不起眼的「字符集」下拉框——它比你想象中更有决定性。

相关文章