当前位置: 首页 > news >正文

修复Discuz 迁移后页面全部变成“????”乱码的问题

最近帮客户做一次老站迁移时,遇到一个典型但又容易误判的问题:

Discuz 论坛从 A 服务器迁移到 B 服务器后,前台页面全部变成“????”。

数据库正常,程序不报错,但所有中文标题、帖子内容全部变问号。

如果你也在做老站迁移,尤其是 Discuz 7 / GBK 站点,这篇文章应该能帮你少走弯路。

一、现象描述

迁移环境:

  • 原服务器:老 MySQL 环境

  • 新服务器:MariaDB 10.11(CloudLinux)

  • 程序:Discuz 7(GBK 版本)

  • 控制面板:cPanel

迁移完成后:

  • 网站可以访问

  • 后台可以进入

  • 数据库内容在 phpMyAdmin 里显示正常中文

  • 但前台页面全部变成问号乱码,如图:

二、第一步排查:数据库是否已经损坏?

这是最关键的一步。

进入 phpMyAdmin 执行:

SHOW CREATE DATABASE 数据库名;
SHOW TABLE STATUS LIKE 'cdb_threads';

结果显示:

  • 表 Collation = gbk_chinese_ci

  • 数据库是 GBK

  • 表数据中文正常

结论:

数据没有损坏,问题出在“连接字符集”。

三、问题根源分析

Discuz 7 是 2006 年的程序。

它默认使用:

$dbcharset = 'gbk';
$charset = 'gbk';

旧服务器环境:

  • MySQL 默认字符集 = GBK

  • 客户端连接默认 = GBK

  • 即使没有显式 SET NAMES 也能正常工作

新服务器(MariaDB 10.11):

  • 默认字符集 = utf8mb4

  • 客户端握手字符集 = utf8mb4

  • 但数据库表实际是 GBK

于是出现:

程序按 UTF8 解释 GBK 数据 → 全部变成 ????

这不是数据库损坏,而是字符集错位。

四、解决方案

打开:

include/db_mysql.class.php

找到 connect() 函数,在连接成功后加入:

mysql_query("SET NAMES gbk", $this->link);

完整位置示例:

$serverset && mysql_query("SET $serverset", $this->link);
mysql_query("SET NAMES gbk", $this->link);
$dbname && @mysql_select_db($dbname, $this->link);

然后清理缓存:

forumdata/cache/*
forumdata/templates/*

刷新页面 —— 问题立即恢复。

五、为什么 MariaDB 10.11 会触发这个问题?

这不是“MariaDB 不兼容 Discuz”。

而是:

  • 新版本数据库默认 UTF8

  • 老程序默认 GBK

  • 且老程序没有强制连接字符集

在现代环境下,老程序更容易暴露这种字符集问题。

六、如何避免再次踩坑?

1. 老 Discuz 迁移时必须确认:

  • 数据库真实字符集

  • 程序配置文件字符集

  • 是否执行了 SET NAMES

2. 导出数据库时带字符集参数:

mysqldump --default-character-set=gbk

3. 未来建议:

  • 将数据库统一转换为 UTF8

  • 升级到 Discuz X3.4

  • 避免继续使用 mysql_* 扩展

七、关于服务器环境的建议

这次迁移使用的是:

  • cPanel

  • CloudLinux

  • MariaDB 10.11

现代环境本身没有问题。

问题往往出现在:

老程序 + 旧编码(GBK) + 新数据库默认 UTF8

在 Hostease 这类支持自定义 PHP / MySQL 环境的服务器上,排查和调整会更方便,尤其在字符集和 SQL 模式方面。

八、总结

这次问题的本质:

不是数据库损坏
不是程序崩溃
而是连接字符集错位

只要数据还在,就可以修复。

如果你的网站迁移后出现“全是问号”,第一时间检查字符集,而不是盲目重装或怀疑数据库损坏。

http://www.jsqmd.com/news/375375/

相关文章:

  • 2026最新十大知名生态板品牌推荐榜!优质环保品质与高性价比源头厂家选择指南,适配全屋定制多场景 - 品牌推荐2026
  • 彻底搞懂 Event Loop:宏任务与微任务的执行顺序全解析
  • 输入烧烤店时段客流,自动调整食材准备量,减少浪费
  • 游记:GZ ICPC2025
  • 2026激光切管十大品牌实力排名(年度十强争霸榜) - 匠言榜单
  • WPS office和WPS pdf
  • 2026年2月宁波精装改造设计公司哪家强? - 疯一样的风
  • 重磅!大数据OLAP助力智慧安防建设的关键
  • P11960 [GESP202503 五级] 平均分配 贪心+模拟
  • CQ小六竞赛生寒假悠闲的一天~~
  • 【Docker基础篇】实用CLI命令指南:run/stop/exec/logs,日常开发高频使用不踩坑
  • AI原生应用领域持续学习:构建技术知识体系的秘诀
  • 2026年2月护资模拟考试app权威推荐,界面流畅刷题更稳定 - 品牌鉴赏师
  • 【Docker基础篇】从0到1写Dockerfile:FROM/COPY/CMD/ENTRYPOINT指令详解+Hello World实战
  • 大规模语言模型的反事实推理与情景模拟
  • 2026最新十大知名全屋定制板材品牌推荐榜!优质环保品质与高性价比源头厂家选择指南,环保耐用适配多场景 - 品牌推荐2026
  • Elasticsearch 与 Cassandra 集成:处理超大规模数据
  • 深入解析:深度学习任务分类与示例(一)
  • 代码复现:深度残差收缩网络的完整Python程序代码复现:深度残差收缩网络的完整Python程序
  • LaTeX常用符号使用随笔
  • 4K/60帧+电脑反控手机?实测这款“蓝莓投屏”:延迟低至30ms,把竞品按在地上摩擦
  • 仿微信聊天软件源码深度解析:从架构设计到多端数据互通实现思路
  • 两天停PanelAI开发,突发奇想用AI写了个免费开源网址导航主题+WordPress后台
  • 市面气柜存在诸多问题,万伯双膜储气柜如何解决?
  • 基于深度学习YOLOv12的脑肿瘤识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • JAVA工具版本差异带来的困挠
  • 基于深度学习YOLOv11的草莓成熟度识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • 悲壮的先知——柏拉图说了些什么
  • day84(2.12)——leetcode面试经典150
  • 《人工智能的数学基础》第二章习题(群部分)【未完成】