一、数据库编码的重要性
织梦CMS在安装时必须正确设置数据库编码,编码选择错误会导致前后台乱码、特殊字符丢失、搜索失效等严重问题。编码设置需在三个层面保持一致:数据库、数据表、程序配置文件。
二、织梦支持的编码类型
| 编码 | 对应程序版本 | 字符集 | 适用场景 |
|---|---|---|---|
| utf8 | UTF-8版 | utf8_general_ci | 常规中文+英文站 |
| utf8mb4 | UTF-8版 | utf8mb4_general_ci | 需存储emoji等4字节字符 |
| gbk | GBK版 | gbk_chinese_ci | 老站延续 |
三、安装向导中的编码设置
织梦安装向导第二步"数据库设定"中有"数据库编码"选项,自动根据程序版本提供。务必与下载的程序版本一致:
- UTF-8版程序 → 选择 utf8 或 utf8mb4
- GBK版程序 → 选择 gbk
切勿手动改成不一致的值,否则安装完成后会出现乱码。
四、建库SQL示例
1. UTF-8数据库
CREATE DATABASE dedecms DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
2. utf8mb4数据库(推荐)
CREATE DATABASE dedecms DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
3. GBK数据库
CREATE DATABASE dedecms DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
五、宝塔建库编码选择
- 宝塔 - 数据库 - 添加数据库。
- 数据库名填写 dedecms。
- 用户名自动生成或自定义。
- 访问权限选"本地"。
- 字符集选择 utf8mb4(推荐)或 utf8。
- 点击提交创建。
六、配置文件修改
安装完成后,数据库编码记录在 /data/common.inc.php:
<?php
$cfg_dbhost='127.0.0.1';
$cfg_dbname='dedecms';
$cfg_dbuser='dedeuser';
$cfg_dbpwd='Abc123!@';
$cfg_dbprefix='dede_';
$cfg_db_language='utf8'; // 此处决定连接时使用的编码
?>
若需从 utf8 切换为 utf8mb4,直接修改 $cfg_db_language='utf8mb4';,并确保数据库与表的字符集也为 utf8mb4。
七、已建库编码转换
若数据库已建为 utf8,想转为 utf8mb4:
-- 修改库
ALTER DATABASE dedecms CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 修改所有表(生成批量语句)
SELECT CONCAT('ALTER TABLE ', table_name, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM information_schema.tables
WHERE table_schema='dedecms';
-- 修改完成后修改 common.inc.php 中 $cfg_db_language
八、乱码排查清单
- 页面乱码:检查HTML的
<meta charset="UTF-8">与程序版本一致。 - 后台编辑乱码:检查 common.inc.php 的
$cfg_db_language。 - 数据库乱码:用phpMyAdmin查看表结构,字符集是否统一。
- 导入SQL乱码:检查SQL文件编码与目标库字符集一致。
- 采集乱码:采集节点中设置目标页面编码。
九、注意事项
utf8mb4 比 utf8 多支持4字节字符(如emoji、生僻字),但索引长度限制更严格,旧版MySQL(5.5.3以下)不支持;从utf8升级utf8mb4前务必全库备份。
十、行动指引
新建站点一律使用 UTF-8版程序 + utf8mb4 数据库,从源头杜绝编码问题;已运行的utf8站点若需支持emoji,可参考第七节做平滑升级;无论何时修改编码,请先在测试环境验证搜索、采集、生成三大功能后再上线。