为什么会出现乱码?(核心原因)
乱码的根本原因是 “编码格式不统一”,就是数据在存储、传输或读取的某个环节,使用的“语言(编码)”不一致,导致对方无法正确“翻译”出来。

在织梦CMS的场景中,通常涉及以下几个环节:
- 数据库本身的编码:你的数据库(如MySQL)在创建时指定了某种字符集,如
utf8或utf8mb4。 - 数据表的编码:数据库中的表(如
dede_archives)可能有自己的字符集设置,可能与数据库默认不同。 - 字段的编码:表中的具体字段(如
title、body)也可能有自己的字符集。 - 数据库导出/导入时的编码:你使用什么工具(如phpMyAdmin、Navicat)导出
.sql文件,以及导入时选择的编码格式。 - 网站程序的编码:织梦CMS程序文件本身的编码(通常是UTF-8)。
- 网页的编码声明:用户浏览器访问网站时,HTML文件头中声明的编码(如
<meta charset="UTF-8">)。
最常见的情况是:
- 你在旧网站上用的是 GBK 编码。
- 你想把数据还原到一个新的、使用 UTF-8 编码的织梦网站上。
- 在导出
.sql文件时,工具没有正确处理编码,或者你在导入时选择了错误的编码,导致数据在“翻译”过程中出错,变成了乱码。
如何解决乱码问题?(从易到难的解决方案)
检查并修正网页编码(最简单的“障眼法”)
乱码只是因为浏览器没有用正确的方式打开网页。
- 打开出现乱码的网页。
- 在浏览器上右键,选择“编码”或“文字编码”。
- 尝试切换不同的编码,比如从“UTF-8”切换到“GBK”,或者反之。
如果切换后正常了,说明你的网站程序编码和数据库编码确实不一致,但这只是临时解决,治标不治本,因为后台编辑、新发布的内容可能还会乱码,你需要进行下面的方案。
(图片来源网络,侵删)
使用专业工具重新导入(最推荐、最有效的方法)
这是解决乱码问题的首选方案,成功率极高,核心思想是:用正确的编码重新执行一次SQL语句。
你需要准备:
- 一个数据库管理工具,强烈推荐 Navicat Premium(支持多种数据库)或 phpMyAdmin(如果你的网站在虚拟主机上)。
- 你的原始
.sql备份文件。
操作步骤(以 Navicat 为例):
- 连接到你的新数据库:用Navicat连接到你正在搭建的、目标编码为UTF-8的数据库。
- 选择目标数据库:在左侧面板中,选中你要导入数据的目标数据库。
- 打开“运行SQL文件”功能:右键点击该数据库,选择“运行SQL文件...”(Run SQL File...)。
- 选择你的备份文件:在弹出的窗口中,选择你的
.sql备份文件。 - 【最关键的一步】设置正确的编码格式:
- 在导入窗口的右下角,通常会有一个 “编码”(Encoding) 选项。
- 如果你的原数据库是GBK编码:请在这里选择
GBK或Chinese (GBK)。 - 如果你的原数据库是UTF-8编码:请选择
UTF-8。 - 如果你不确定:可以都试一下,通常选择
GBK能解决大部分从旧站迁移过来的乱码问题。
- 开始执行:点击“开始”(Start)或“确定”(OK)等待导入完成。
为什么这个方法有效? Navicat在执行SQL文件前,会先按照你指定的编码去“解读”这个文件,它会把文件中的乱码字节流,正确地“翻译”成字符,然后再以目标数据库的编码(UTF-8)存入,这相当于在源头上纠正了编码错误。

如果用的是 phpMyAdmin:
- 登录 phpMyAdmin,选择你的数据库。
- 点击顶部菜单的“导入”(Import)选项卡。
- 选择你的
.sql文件。 - 向下滚动到页面底部,在“格式”部分,有一个“字符集”下拉菜单。
- 同样,根据你的原数据库编码选择
GBK或utf8,然后点击“执行”。
手动修改数据库(适用于少量乱码或方案二无效)
如果数据量很小,或者某个特定字段乱码,你可以直接在数据库里修改。
- 连接数据库:使用Navicat或phpMyAdmin连接到你的数据库。
- 找到乱码的表:
dede_archives。 - 修改数据:找到乱码的那条记录,直接在字段中修改文字。
- 注意:如果你的网站后台已经可以正常输入中文,但数据库里是乱码,这说明问题出在“程序写入数据库”的环节,请检查方案四。
- 使用SQL语句批量修正:如果乱码有规律,可以使用
UPDATE语句配合CONVERT函数,将gbk编码的字段转换为utf8:-- 假设表名是 dede_archives,字段是 title,并且它原本是GBK编码,但被错误地存为UTF-8的样子 UPDATE dede_archives SET title = CONVERT(CONVERT(title USING gbk) USING utf8) WHERE id = [你的记录ID];
警告:此操作风险较高,请务必先备份数据库!不确定的话不要轻易使用。
检查并修正织梦程序配置(治本之策)
如果新网站导入数据后,新发布的内容或后台编辑时出现乱码,那么问题出在织梦程序的配置上。
-
检查
data/common.inc.php文件: 这是织梦的核心配置文件,打开它,找到数据库连接信息部分,确保charset设置为utf8。// $cfg_dbhost = 'localhost'; // $cfg_dbname = 'your_database_name'; // $cfg_dbuser = 'your_username'; // $cfg_dbpwd = 'your_password'; // $cfg_dbprefix = 'dede_'; $cfg_db_language = 'utf8'; // 确保这一行是 utf8
-
检查
include/dedesql.class.php文件: 在这个文件中,找到连接数据库的代码部分,确保在执行mysql_query或mysqli_query之前,设置了正确的字符集。 通常会有类似这样的代码:// 在连接成功后执行 $this->linkID = @mysqli_connect($dbhost, $dbuser, $dbpwd, $dbname); if ($this->linkID) { mysqli_query($this->linkID, "SET NAMES utf8"); // 这一句非常关键! }如果没有
SET NAMES utf8;这句,或者设置成了gbk,就需要加上或修改它。
如何预防未来再次出现乱码?
预防永远比修复更重要。
- 统一使用UTF-8编码:从2012年起,织梦官方推荐所有新站都使用 UTF-8 编码,它能完美支持全球所有语言,避免GBK编码的局限性。
- 养成良好的备份习惯:
- 备份数据库:定期通过phpMyAdmin或Navicat导出完整的数据库结构(结构+数据)。
- 备份程序文件:定期下载整个网站程序。
- 使用织梦自带的备份功能:后台 -> 系统 -> 数据库备份/恢复,可以一键备份。
- 备份时注意编码:在导出数据库时,养成检查“编码”设置的习惯,确保导出的是你想要的格式(通常是UTF-8)。
- 迁移前先确认编码:在更换服务器或迁移网站前,先搞清楚旧站和新站的数据库编码是什么,做到心中有数。
| 问题现象 | 推荐解决方案 | 核心要点 |
|---|---|---|
| 还原数据库后,网站内容显示乱码 | 使用专业工具重新导入 | 在导入时,指定原数据的编码格式(如GBK)。 |
| 只有新发布的内容乱码 | 检查织梦程序配置 | 检查 common.inc.php 和 dedesql.class.php 中的 charset 和 SET NAMES 设置。 |
| 少量数据或特定字段乱码 | 手动修改数据库 | 直接在数据库管理工具中修改,或使用SQL语句。 |
| 浏览器打开显示乱码 | 检查网页编码 | 右键切换浏览器编码,临时查看。 |
希望这份详细的指南能帮你成功解决织梦数据库还原的乱码问题!祝你建站顺利!
