|
现在Emoji 已逐渐普及,尤其手机用户使用Emoji 的频率也越来越高 不过传统的UTF 8 编码资料库无法储存Emoji 符号,所以常常造成内容输入后表情变空白的问题, Discuz 本身是讨论区,又只有UTF 8 编码能使用,实在是不完美,所以就只好自己手动修改了~ 进入正题XD 1. 注意事项 这里将以修改「全新安装」版本的方式来做范例,可以到Discuz官网下载最新安装包, 要将Discuz 编码修改成utf8mb4 其实不难,不过要花上一些时间, 最重要的是mysql的版本最低需求5.5.3才支援utf8mb4编码。
2. 修改Config首先要修改的就是config档案,如果是全新安装的可以直接修改 config/config_global_default.php、config/config_ucenter_default.php两个档案, 如果是已安装(论坛已运作中)的则是修改 config/config_global.php、config/config_ucenter.php两个档案。 开启config_global_default.php修改第38行的 dbcharset为 utf8mb4: - $_config['db'][1]['dbcharset'] = 'utf8mb4';
复制代码
开启 config_ucenter.php修改第17行的UC_DBCHARSET: - define('UC_DBCHARSET', 'utf8mb4');
复制代码
已运作中的论坛需多修改一个档案!
开启uc_server/data/config.inc.php,修改第6行的UC_DBCHARSET: - define('UC_DBCHARSET', 'utf8mb4');
复制代码
3. 修改资料库编码如果是全新安装的,修改 install/index.php,找到第375行:
上方加上: - runquery('ALTER DATABASE '.$dbname.' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;');
复制代码
如此一来安装资料表时资料库就会一并修改为 utf8mb4 编码,如果建立资料库时已设定好编码可以忽略此步骤。
4. 修改预设编码如果是全新安装的,还需要修改 install/include/install_var.php第27行的DBCHARSET: define('DBCHARSET', 'utf8mb4');5. 修改资料库栏位长度修改到这边就差不多了,不过这时候如果直接进行安装,在安装过程中会出现大量以下错误: 这是因为编码之间的差异差异导致字节计算数量超出范围的关系。 简单说就是Discuz本身是针对UTF 8编码来建立资料库,但修改为utf8mb4后,预设建立的SQL有部分栏位所定义的主键字节长度超出了可使用的范围,详情可以见此说明。 Discuz 所使用的资料库引擎是MyISAM,MyISAM 可使用的主键长度是1000 字节,UTF 8 每个文字占用3 字节、utf8mb4 占用4 字节, 而Discuz 预设建立的SQL 中,部分主键定义的长度是VARCHAR(255),在UTF 8 下255*3=765 < 1000,但 utf8mb4 下255*4=1020 > 1000,所以会产生错误, 这时只能手动将预设SQL档案做修改,将主键定义长度修改为1000/4 = 250(不过250似乎还是错误所以取249),需要修改的档案有install/data/install.sql、uc_server/install/uc.sql, 修改过程有点麻烦,我自己使用的方式如下: - 搜寻关键字255
- 查看定义255 长度的栏位有没有被定义成主键
- 有的话就把该栏位长度修改成249
X3.3 版本,install.sql 总共修改14 处:40 行、153 行、292 行、295 行、322 行、330 行、901 行、926 行、945 行、1269 行、2391 行、3464 行、3805 行、4008 行 uc.sql 总共修改1 处:123 行
6. 完成到这边编码修改步骤就全部完成,直接安装应该就能顺利完成了,而且在论坛内任何地方发表时也都可以使用Emoji 啰!
运作中的论坛?至于如果是Discuz 已经安装完成,但也想要直接修改的人呢,除了要修改步骤2 之外, 可以直接到资料库管理中心(通常是phpMyAdmin),请先对照步骤5 要修改的SQL 资料表栏位有哪些(请自行先备份资料库), 手动修改栏位长度,例如install.sql第40行修改的是 pre_common_admincp_perm的 perm栏位: 进入资料表,切换到「结构」,找到栏位后,点击[ 修改 ]
将长度修改为249后按[ 储存 ]
将总共​​14+1 个地方全部修改完毕即可。
修改资料库编码接着回到资料库,点击[ 操作 ],找到编码与排序后选择 utf8mb4_general_ci,点击[ 执行 ] 如此一来资料库编码就修改完成。
修改资料表编码这部分比较麻烦一点,不过有个偷懒的方式可以批次修改(来源),首先到资料库中切换到[ SQL ],输入指令SHOW TABLES; 并执行:
执行后就会看到所有的资料表名称,把页面拉到最下方去,点击[ 复制到剪贴簿 ]
开启NimbleText,把东西直接贴到 For each row in this list下方的框框内,不过上面的说明和空白部分都不要,所以把它删除
接着在下方的 Substitute using this pattern框框内贴上: - ALTER TABLE `$0` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
复制代码
恭喜!你成功的执行了懒人步骤,赶快把下方 Results 里的内容全部复制起来
再次进入资料库的SQL指令页面,把复制的东西全部贴进去,按下[ 执行 ]
大功告成~
|