confluence 无法保存页面 排错记录

前言

最近用户反馈在使用confluence时,保存页面会报错:“无法保存页面。请检查与服务器通信,或检查内容是否有特殊字符/emoji表情”。从提示中我们也能知道可能是服务器通信的问题,考虑到网络过于复杂,先着手排查是否是数据库字符集的问题。

定位问题

通过咨询厂家和查看官网的issue,确定出现/emoji 表情是mysql数据库字符集为utf8所致,因为utf8最大字符长度为3字节,utf8mb4也就是most bytes 4,向下兼容utf8。有些特殊字符和emoji表情需要4字节,所以将数据表转换为utf8mb4。

  • 将数据表编码和字符集转为utf8mb4
ALTER TABLE "表名" CONVERT TO CHARACTER SET = utf8mb4 COLLATE = utf8mb4_Unicode_ci;

注:confluence数据库表有近120个,一个一个更新可太累了

  • 批量更新操作
SELECT
CONCAT("ALTER TABLE `", TABLE_NAME,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_Unicode_ci;")
AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="Confluence"  #这里的confluence需要根据数据库中的名称进行替换
AND TABLE_TYPE="BASE TABLE"

将运行结果复制然后运行。

  • 复制运行
    运行时会出现诸如以下的错误
ERROR 1833 (HY000): Cannot change column 'user_key': used in a foreign key constraint …………

这个问题是因为外键必须与它们引用的列的数据类型匹配,所以更改列的数据类型可能会扰乱引用它的外键。Mysql有一个设置来防止并否认尝试修改列导致修改不成功,可通过以下的命令来解决

  • set foreign_key_checks=0
  • ALTER TABLE “表名” CONVERT TO CHARACTER SET = utf8mb4 COLLATE = utf8mb4_Unicode_ci;
  • set foreign_key_checks=1

结论

虽然保存还是出现报错,但是已基本排除是/emoji的问题了。那即有可能就是网络的原因。
网络排查待解决中………………

你可能感兴趣的:(Mysql,mysql,数据库)