首先明确一个东西,如果confluence写得文章保存以后出现乱码,那么只有三种可能:
文件系统编码不正确。不支持中文(上传的附件中有中文,预览出现乱码,大部分是这个原因)数据库编码不正确(大部分是这个原因)数据连接串没显示指定编码(这个最容易忽略,这次问题也是因为这个)
文件系统编码不正确
confluence官网提供了专门校验文件系统编码的方法。 官网推荐检测文件系统编码具体方法其实很简单,就是用访问下面的URL,confluence会自动检测编码的支持程度。
#如果有域名的话可以用这个URL:/admin/encodingtest.action#或者简单粗暴直接用ip访问也行http://<host address>:<port>/admin/encodingtest.action
如果文件系统编码支持中文,那么继续下一步检验 数据库的编码支持。
数据库编码中文支持
调整数据库乱码分为三步
数据库层面上的字符检查collation层面的编码检查表结构层次的编码检查数据库层面上的字符检查
#运行下面的sql语句,查看结果,结果应该如下图所示show variables like 'char%';
sql执行结果应该如下所示:
character_set_client utf8character_set_connection utf8character_set_database utf8character_set_filesystem binarycharacter_set_results utf8character_set_server utf8character_set_system utf8character_sets_dir /rdsdbbin/mysql-5.6.27.R1/share/charsets/
如果不是那么分别执行对应的sql语句,然后看下是不是修改成了utf8
set character_set_client=utf8;set character_set_connection=utf8;set character_set_database=utf8;set character_set_results=utf8;set character_set_server=utf8;set character_set_system=utf8;
collation层面的编码检查
运行如下的sql语句
show variables like 'collation%';
上面sql运行结果应该如下图所示:
#结果应该如下collation_connection utf8_general_cicollation_database utf8_bincollation_server utf8_general_ci
如果不是上面所示的结果,那么执行对应的sql语句调整过来
ALTER DATABASE <Confluence database name> CHARACTER SET utf8 COLLATE utf8_bin;set collation_connection=utf8;set collation_database=utf8 ;set collation_server=utf8;
表结构f层次的编码检查
#执行如下两个sql,会自动生成修改语句, 然后你只用复制结果sql,执行就可以修复table层级的编码SELECT CONCAT('ALTER TABLE ', table_name, ' CHARACTER SET utf8 COLLATE utf8_bin;') FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS CWHERE C.collation_name = T.table_collationAND T.table_schema = 'confluence 数据库名字'AND(C.CHARACTER_SET_NAME != 'utf8'ORC.COLLATION_NAME != 'utf8_bin');SELECT CONCAT('ALTER TABLE `', table_name, '` MODIFY `', column_name, '` ', DATA_TYPE, ' CHARACTER SET UTF8 COLLATE utf8_bin', (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')FROM information_schema.COLUMNSWHERE TABLE_SCHEMA = 'confluence 数据库名字'AND DATA_TYPE != 'varchar'AND(CHARACTER_SET_NAME != 'utf8'ORCOLLATION_NAME != 'utf8_bin');
经过上面步骤,数据库层面的编码格式已经修复了。
修复数据库连接串的编码
vim /var/atlassian/application-data/confluence/confluence.cfg.xml#找到如下行<property name="hibernate.connection.url">jdbc:mysql://jira.csphgnawyi6m.us-west-1./confluencedb</property>#修改为<property name="hibernate.connection.url">jdbc:mysql://jira.csphgnawyi6m.us-west-1./confluencedb?useUnicode=true&characterEncoding=UTF-8</property>
如果觉得《confluence中文乱码解决思路和方法》对你有帮助,请点赞、收藏,并留下你的观点哦!