|
|
discuzX 3.4 默认字符集是utf8,安装后无法发一些表情符,也不能用表情符当用户名。
现在做测试改成 utf8mb4
测试机环境
centos 7.5
mysql 8.0.11
php 7.2.5
apache 2.4.6
一、全新安装
下载补丁文件,替换加入到discuzX 3.4 2018.01.01官方原版文件中,即可完成安装。
patch_utf8mb4.zip
(47.35 KB, 下载次数: 105)
二、换服务器升级安装(内容更新中)
1.导出旧空间上数据库的表结构文件struct.sql 和 数据文件data.sql
- mysqldump -d -u root -p$mysqlpass bbs > struct.sql
- mysqldump -t -u root -p$mysqlpass bbs --default-character-set=UTF8 > data.sql
复制代码
2.修改表结构文件 struct.sql,
_ci结尾的校对集大小写不敏感,即不区分大小写,ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的.
凡是在以前导入中提示 ERROR 1062 (23000): Duplicate entry 'xxxx' for key 'username' 之类的提示,往往出在选用不当的校对集引起的。
本次升级调试时使用了_ci的校对集,就遇到这个问题,象 'Avaloń' 与 'avalon' 被认为是重复,导致导入失败。
校对集 COLLATE=utf8mb4_bin 是区分大小写,可以防止旧库中有KEY属性的论坛用户名ABC、abc导入时被认为是重复的问题。
修改struct.sql
DEFAULT CHARSET=gbk 全部改成 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
varchar(255) 修改值
char(255) 修改值
callsed 文件内容
- /^CREATE TABLE `pre_common_addon`/,/^) ENGINE=MyISAM/s/`key` varchar(255)/`key` varchar(250)/
- /^CREATE TABLE `pre_common_admincp_perm`/,/^) ENGINE=MyISAM/s/`perm` varchar(255)/`perm` varchar(244)/
- /^CREATE TABLE `pre_common_advertisement_custom`/,/^) ENGINE=MyISAM/s/`name` varchar(255)/`name` varchar(250)/
- /^CREATE TABLE `pre_common_cache`/,/^) ENGINE=MyISAM/s/`cachekey` varchar(255)/`cachekey` varchar(250)/
- /^CREATE TABLE `pre_common_card`/,/^) ENGINE=MyISAM/s/`id` char(255)/`id` char(250)/
- /^CREATE TABLE `pre_common_member_profile_setting`/,/^) ENGINE=MyISAM/s/`fieldid` varchar(255)/`fieldid` varchar(250)/
- /^CREATE TABLE `pre_common_member_security`/,/^) ENGINE=MyISAM/s/`fieldid` varchar(255)/`fieldid` varchar(242)/
- /^CREATE TABLE `pre_common_setting`/,/^) ENGINE=MyISAM/s/`skey` varchar(255)/`skey` varchar(250)/
- /^CREATE TABLE `pre_forum_groupfield`/,/^) ENGINE=MyISAM/s/`type` varchar(255)/`type` varchar(242)/
- /^CREATE TABLE `pre_home_favorite`/,/^) ENGINE=MyISAM/s/`idtype` varchar(255)/`idtype` varchar(232)/
- /^CREATE TABLE `pre_mobile_setting`/,/^) ENGINE=MyISAM/s/`skey` varchar(255)/`skey` varchar(250)/
- /^CREATE TABLE `pre_portal_topic`/,/^) ENGINE=MyISAM/s/`name` varchar(255)/`name` varchar(250)/
- /^CREATE TABLE `cdb_uc_badwords`/,/^) ENGINE=MyISAM/s/`find` varchar(255)/`find` varchar(250)/
- s/DEFAULT CHARSET=gbk/DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin/
复制代码
在linux shell 下执行以下命令进行替换
- sed -i -f callsed struct.sql
复制代码
也可以在mysql 命令行下先修改原库(注意先备份数据库)
- USE bbs;
- ALTER TABLE `pre_common_addon` MODIFY COLUMN `key` varchar(250);
- ALTER TABLE `pre_common_admincp_perm` MODIFY COLUMN `perm` varchar(244);
- ALTER TABLE `pre_common_advertisement_custom` MODIFY COLUMN `name` varchar(250);
- ALTER TABLE `pre_common_cache` MODIFY COLUMN `cachekey` varchar(250);
- ALTER TABLE `pre_common_card` MODIFY COLUMN `id` char(250);
- ALTER TABLE `pre_common_member_profile_setting` MODIFY COLUMN `fieldid` varchar(250);
- ALTER TABLE `pre_common_member_security` MODIFY COLUMN `fieldid` varchar(242);
- ALTER TABLE `pre_common_setting` MODIFY COLUMN `skey` varchar(250);
- ALTER TABLE `pre_forum_groupfield` MODIFY COLUMN `type` varchar(242);
- ALTER TABLE `pre_home_favorite` MODIFY COLUMN `idtype` varchar(232);
- ALTER TABLE `pre_mobile_setting` MODIFY COLUMN `skey` varchar(250);
- ALTER TABLE `pre_portal_topic` MODIFY COLUMN `name` varchar(250);
- ALTER TABLE `cdb_uc_badwords` MODIFY COLUMN `find` varchar(250);
复制代码
3.在新空间的 mysql命令行下,导入struct.sql 和 数据文件data.sql
- USE bbs;
- SOURCE struct.sql;
- SOURCE data.sql
复制代码
4.恢复旧空间的web数据库到新空间上,修改以下文件,将第一次出现连接库的'gbk' 改为 'utf8mb4'.每个文件只改一处。
config/config_global.php
config/config_global.php
uc_server/data/config.inc.php
5.按官方升级要求,上传官方版文件替换,进后台 > 工具 > 更新缓存。
另外还有source/class/table/下面三个文件需要更新,具体见本帖上方发的全新安装补丁包中提取。
table_common_usergroup.php
table_forum_announcement.php
table_forum_forum.php
6.界面 > 编辑器设置 > Discuz!代码,删除那些不可用的标签,可解决因使用Discuz标签而导致帖子内容无法正常显示的问题。
7.升级安装成功
目前仍存在问题:编辑正在投放的广告位时无内容显示。
这次还发现有一个分页标签,点下方的2可以看下一页,一直没用过这个标签,第一次用。
|
评分
-
查看全部评分
|