confluence中文乱码解决思路和方法

折腾几天的confluence中文乱码终于结束了。把这几天心理路程整理下,前事不忘后事之师。
首先明确一个东西,如果confluence写得文章保存以后出现乱码,那么只有三种可能:

  • 文件系统编码不正确。不支持中文(上传的附件中有中文,预览出现乱码,大部分是这个原因)
  • 数据库编码不正确(大部分是这个原因)
  • 数据连接串没显示指定编码(这个最容易忽略,这次问题也是因为这个)

文件系统编码不正确

confluence官网提供了专门校验文件系统编码的方法。 官网推荐检测文件系统编码
具体方法其实很简单,就是用访问下面的URL,confluence会自动检测编码的支持程度。


    #如果有域名的话可以用这个URL:
    http://confluence.atlassian.com/admin/encodingtest.action
    #或者简单粗暴直接用ip访问也行
    http://<host address>:<port>/admin/encodingtest.action


如果文件系统编码支持中文,那么继续下一步检验 数据库的编码支持。

数据库编码中文支持


调整数据库乱码分为三步

  • 数据库层面上的字符检查
  • collation层面的编码检查
  • 表结构层次的编码检查

    数据库层面上的字符检查


    #运行下面的sql语句,查看结果,结果应该如下图所示
    show variables like 'char%';


sql执行结果应该如下所示:


    character_set_client    utf8
    character_set_connection    utf8
    character_set_database    utf8
    character_set_filesystem    binary
    character_set_results    utf8
    character_set_server    utf8
    character_set_system    utf8
    character_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_ci
    collation_database    utf8_bin
    collation_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 C
    WHERE C.collation_name = T.table_collation
    AND T.table_schema = 'confluence 数据库名字'
    AND
    (
        C.CHARACTER_SET_NAME != 'utf8'
        OR
        C.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.COLUMNS
    WHERE TABLE_SCHEMA = 'confluence 数据库名字'
    AND DATA_TYPE != 'varchar'
    AND
    (
        CHARACTER_SET_NAME != 'utf8'
        OR
        COLLATION_NAME != 'utf8_bin'
    );


经过上面步骤,数据库层面的编码格式已经修复了。

修复数据库连接串的编码


    vim  /var/atlassian/application-data/confluence/confluence.cfg.xml
    #找到如下行
    <property name="hibernate.connection.url">jdbc:mysql://jira.csphgnawyi6m.us-west-1.rds.amazonaws.com/confluencedb</property>
    #修改为
    <property name="hibernate.connection.url">jdbc:mysql://jira.csphgnawyi6m.us-west-1.rds.amazonaws.com/confluencedb?useUnicode=true&amp;characterEncoding=UTF-8</property>
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
慷慨打赏