核心原理
DedeCMS 的 GBK 转 UTF-8 转换,本质上是三个部分的同步转换:
- 数据库字符集:从
gbk或latin1转换为utf8mb4。 - 数据库表和字段字符集:将所有数据表的字符集,以及表中所有存储文本的字段(如
title,content等)的字符集,都转换为utf8mb4。 - 程序文件编码:将所有 PHP 程序文件(
.php)和模板文件(.htm)的文件内部编码从 GBK 转换为 UTF-8。
为什么是 utf8mb4 而不是 utf8?
utf8 在 MySQL 中最大只能支持 3 个字节的字符,无法存储 Emoji 表情和一些特殊的生僻汉字。utf8mb4 是 utf8 的超集,完全兼容 utf8 并支持 4 字节的字符,是目前推荐使用的标准。
转换方案(推荐:手动+工具结合)
这是最安全、最可控的方法,虽然步骤稍多,但能有效避免大部分风险。
第一步:准备工作(至关重要!)
-
完整备份!完整备份!完整备份!
- 数据库备份:通过 DedeCMS 后台的【系统】->【数据库备份/还原】功能,或者使用 phpMyAdmin 导出数据库。请务必选择“导出”格式,而不是“SQL”格式,这样能保证字符集信息被完整导出,文件名建议为
dede_gbk_backup_YYYYMMDD.sql。 - 网站文件备份:通过 FTP 或 SSH 将您网站根目录下的所有文件下载到本地,或者打包成一个压缩包,建议保留完整的目录结构。
- 记录配置信息:记下您的数据库主机、用户名、密码、数据库名等。
- 数据库备份:通过 DedeCMS 后台的【系统】->【数据库备份/还原】功能,或者使用 phpMyAdmin 导出数据库。请务必选择“导出”格式,而不是“SQL”格式,这样能保证字符集信息被完整导出,文件名建议为
-
准备转换环境
- 本地环境:推荐在本地搭建一个与线上环境一致的 DedeCMS(GBK版本)进行测试,或者直接在服务器上操作(风险较高,建议先在测试环境操作)。
- 下载新版 UTF-8 版本:从 DedeCMS 官网下载一个与您当前版本号完全一致的 UTF-8 版本安装包,您线上用的是 DedeCMS V5.7 SP2 GBK 版,那么就下载 V5.7 SP2 UTF-8 版。
第二步:转换数据库
这是最核心也是最复杂的步骤。
使用 DedeCMS 自带的转换工具(推荐)
- 上传 UTF-8 程序:将下载好的 UTF-8 版本 DedeCMS 的
install目录上传到您的网站根目录,覆盖掉旧的 GBK 版本的install目录。 - 运行转换程序:在浏览器中访问
http://您的域名/install/index.php。 - 选择转换:在安装向导中,您会看到“升级/转换”或类似的选项,选择“从 GBK 转换到 UTF-8”。
- 填写信息:按照提示,填写您的数据库信息(主机、用户名、密码、数据库名)。
- 执行转换:程序会自动执行以下操作:
- 备份当前数据库(可选,但建议)。
- 将数据库的默认字符集修改为
utf8mb4。 - 遍历所有数据表,将表字符集修改为
utf8mb4。 - 遍历所有表中的文本/字符型字段,将其字符集修改为
utf8mb4。 - 对数据库中的所有数据进行字符集编码转换,从 GBK 转码为 UTF-8。
- 完成:等待转换完成,根据提示删除
install目录。
手动使用 phpMyAdmin(适用于熟悉数据库操作的用户)
如果自动转换工具失败,可以手动操作。
- 导出数据:使用 phpMyAdmin 导出您的数据库,选择“自定义” -> “格式”为“SQL”,在“SQL 选项”中,勾选“添加
DROP TABLE/VIEW/PROCEDURE/FUNCTION”和“禁用外键检查”。 - 修改 SQL 文件:用高级文本编辑器(如 VS Code, Sublime Text, Notepad++)打开导出的
.sql文件。- 将文件中的
DEFAULT CHARSET=gbk或CHARSET=gbk全部替换为DEFAULT CHARSET=utf8mb4。 - 将
ENGINE=MyISAM(如果存在) 替换为ENGINE=InnoDB(InnoDB 对 UTF-8mb4 支持更好)。
- 将文件中的
- 创建新数据库:在 phpMyAdmin 中,新建一个数据库,在创建时选择“整理”(Collation)为
utf8mb4_general_ci或utf8mb4_unicode_ci。 - 导入数据:将修改后的
.sql文件导入到这个新的 UTF-8 数据库中,phpMyAdmin 会自动处理字符集的转换。
第三步:转换程序文件
-
替换程序文件:
- 强烈建议:将您本地备份的 GBK 版本网站文件中的
/data目录(里面存着配置文件和缓存)和/dede/目录(后台目录)复制出来。 - 删除服务器上网站根目录下的所有文件(再次确认您已经备份!)。
- 将下载的 UTF-8 版本 DedeCMS 的所有文件上传到服务器。
- 将您刚才备份出来的
/data和/dede目录覆盖上传到 UTF-8 版本的相应位置,这样能保留您的网站配置和后台管理权限。
- 强烈建议:将您本地备份的 GBK 版本网站文件中的
-
修改配置文件:
- 打开
/data/common.inc.php文件。 - 检查数据库连接信息,确保数据库名、用户名、密码正确。
- 关键一步:找到
$cfg_db_language = 'gbk';这一行,将其修改为$cfg_db_language = 'utf8';。
- 打开
-
转换文件编码:
- 这一步是必须的,否则模板和程序文件内部还是 GBK 编码,会导致乱码。
- 工具推荐:使用 Notepad++ 或 VS Code。
- 操作方法:
- 通过 FTP 将网站根目录下的所有文件下载到本地。
- 在 Notepad++ 中,使用“文件” -> “打开文件夹”,选择整个网站文件目录。
- 按
Ctrl + A全选所有文件。 - 在菜单栏选择“编码” -> “转换为 UTF-8 编码”,Notepad++ 会自动识别并转换非 UTF-8 编码的文件。
- 转换完成后,将整个文件夹重新上传到服务器,覆盖旧文件。
第四步:检查与修复
- 访问网站:清除浏览器缓存,访问您的网站首页和内页,检查是否有乱码。
- 登录后台:访问
/dede/目录,尝试登录后台,检查是否正常。 - 检查数据:进入后台,检查文章、图集、软件等内容的标题和内容是否正常显示。
- 修复乱码:如果发现部分内容乱码,通常是转换不完全或特殊字符导致,可以尝试在后台重新编辑并保存一下乱码的文章,这会触发一次数据重新写入,通常能修复。
推荐的自动化工具(作为辅助,不能完全依赖)
市面上有一些所谓的“一键转换”工具,它们大多是封装了上述步骤的脚本。使用前请务必谨慎,并确保已经完整备份!
- DedeCMS 官方论坛/社区工具:一些老牌的 DedeCMS 技术社区会提供他们自己编写的转换工具,这些工具通常经过了社区用户的检验,相对可靠,搜索关键词 “
dedecms gbk转utf8 一键工具”。 - 第三方开发者工具:一些个人开发者也会发布类似工具。使用这类工具的风险较高,因为它们可能包含后门或逻辑错误,只建议在测试环境使用。
重要提示:这些工具的核心逻辑和上面描述的手动方法是一致的,即“改数据库结构 + 改文件编码”,它们无法 100% 保证所有场景下都完美转换,特别是对于高度定制或修改过的网站。
| 步骤 | 操作 | 关键点 |
|---|---|---|
| 备份 | 备份数据库和网站文件 | 这是底线,不做就别开始! |
| 转数据库 | 使用 install 目录下的转换工具 或 手动修改 SQL |
核心是 gbk -> utf8mb4 |
| 换程序 | 上传 UTF-8 程序,覆盖 /data 和 /dede |
保留配置和权限 |
| 改配置 | 修改 common.inc.php 中的 $cfg_db_language |
gbk -> utf8 |
| 转文件编码 | 用 Notepad++ 或 VS Code 批量转换文件为 UTF-8 | 解决模板和 PHP 文件乱码 |
| 检查 | 测试前台、后台、数据内容 | 确保万无一失 |
遵循以上步骤,虽然繁琐,但能最大程度地保证您的 DedeCMS 网站从 GBK 平稳、安全地迁移到 UTF-8,祝您转换顺利!
