找回密码
 立即注册
快捷导航

让 Discuz! 支持 Emoji 表情符号,以 utf8mb4 取代 UTF-8 版本

[复制链接]
NSFW 2023-6-14 22:31:57 | 显示全部楼层

让 Discuz! 支持 Emoji 表情符号,以 utf8mb4 取代 UTF-8 版本

现在 Emoji 已逐渐普及,尤其手机用户使用 Emoji 的频率也越来越高 不过传统的 UTF 8 编码数据库无法储存 Emoji 符号,所以常常造成内容输入后表情变空白的问题, Discuz 本身是讨论区,又只有 UTF 8 编码能使用,实在是不完美,所以就只好自己手动修改了~

以下所有修改信息以DZ3.4版本为例

Discuz 身为国内最大的论坛提供商,又是腾讯旗下的公司管理开发的,却一直保持摆烂状态, 虽然 X3.4 已经开源了,不过 Issue 没在处理,PR 除非是比较大的漏洞也很少在合并, 新功能不太想加,https 不想支持,编辑器的坑太深所以 Bug 也索性不管了,通通只能自己来,叹气~

注意事项

这里将以修改「全新安装」版本的方式来做范例,可以到 Discuz 官网下载最新安装包, 要将 Discuz 编码修改成 utf8mb4 其实不难,不过要花上一些时间, 最重要的是 MySQL 的版本最低需求 5.5.3 才支持 utf8mb4 编码。

修改 Config

首先要修改的就是 config 文件,如果是全新安装的可以直接修改 config/config_global_default.phpconfig/config_ucenter_default.php 两个文件,如果是已安装(论坛已运作中)的则是修改 config/config_global.phpconfig/config_ucenter.php 两个文件。

修改第 38 行的 dbcharset 为 utf8mb4

$_config['db'][1]['dbcharset'] = 'utf8mb4';

编辑 uc_server/data/config.inc.php,修改第 6 行的 UC_DBCHARSET:

define('UC_DBCHARSET', 'utf8mb4');

备份数据库修改编码

使用 notepad++,替换一下备份的数据文件即可

varchar(255) 字符全部替换为 varchar(243)

char(255) 字符全部替换为 char(243)

(6 + 255) * 4  > 1000 ,超过1000 ,故用(243)

'utf8'  字符全部替换为  'utf8mb4' (注意带'号,不是替换utf-8

数据库备份的sql文件,需要 全部 替换。

然后重装论坛,恢复数据库即可。


全新安装

1.如果是全新安装的,修改 install/index.php,找到第 375 行左右:

runquery($sql);

上方加上:

runquery('ALTER DATABASE '.$dbname.' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;');

如此一来安装数据表时数据库就会一并修改为 utf8mb4 编码,如果建立数据库时已设定好编码可以忽略此步骤。

2.修改预设编码

如果是全新安装的,还需要修改 install/include/install_var.php 第 27 行的 DBCHARSET:

define('DBCHARSET', 'utf8mb4');

3.修改数据库字段长度

修改到这边就差不多了,不过这时候如果直接进行安装,在安装过程中会出现大量以下错误:

这是因为编码之间的差异差异导致字节计算数量超出范围的关系。

简单说就是Discuz本身是针对UTF 8编码来建立数据库,但修改为 utf8mb4 后,默认建立的 SQL 有部分字段所定义的主键字节长度超出了可使用的范围,详情可以见此说明。

Discuz 所使用的数据库引擎是 MyISAM,MyISAM 可使用的主键长度是 1000 字节,UTF 8 每个文字占用 3 字节、utf8mb4 占用 4 字节,

而 Discuz 默认建立的 SQL 中,部分主键定义的长度是 VARCHAR(255),在 UTF 8 下 2553=765 < 1000,但 utf8mb4 下 2554=1020 > 1000,所以会产生错误,

这时只能手动将默认 SQL 文件做修改,将主键定义长度修改为 1000/4 = 250(不过 250 似乎还是错误所以取 249),需要修改的档案有 install/data/install.sql、uc_server/install/uc.sql, 修改过程有点麻烦,我自己使用的方式如下: 搜寻关键字 255 查看定义 255 长度的字段有没有被定义成主键 有的话就把该字段长度修改成 249

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-12-4 01:19

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表