这篇文章介绍一下Jira在使用备份恢复时字符集出现问题的对应方法。
现象
在Jira进行迁移或者备份的时候,在新的Jira的实例中通过菜单导入之前备份的zip文件,如果字符集有问题,一般会出现如下图类似的错误信息:
以本文碰到的问题为例,实际的问题是因为字符集的问题,从如下的MySQL的数据库的字符集编码可以看到
character_set_database的设定为latin1,所以对于utf8中的汉字无法正常动作。
utf8旧版(RFC 2279)标准最多支持每个字符6个字节,在2002年MySQL在4.1 preview版中使用此标准,然后后续对此进行了调整,使得utf8最多能够支持三个字节的序列。MySQL中对于utf8新版整整的支持是从2003年的4.1版本时开始的,而utf8标准(RFC 3629)是2003年底才出的初版而且还在不断更新,UTF8每个字符最多会有四个字节,所以后续(2010年)MySQL悄悄推出了utf8mb4这么长的名称来表示真正的UTF8,尴尬的情况就是之前的数据库有可能需要重新构建。一般可能不会出错,出错的时候可以考虑朝这个方向考虑一下。本文示例中继续使用utf8,虽然在MySQL中utf8mb4是utf8的超集,为了不引起因字符集转换引起的新的问题,本文继续使用utf8,新数据库创建的时候应当认真考虑这个问题。
设定参数MySQL的Server端应当设定如下参数以保证
启动参数 设定值 character_set_server utf8collation-server、utf8_general_ci
常用命令如下MySQL命令可能会被使用:
查询字符集类别:show variables like ‘%character%’
修改字符集类别:alter database <数据库名> character set utf8;
docker-compose.yml示例[root@server-228 jira]# cat docker-compose.yaml version: '2' services: # database service: mysql mysql: image: mysql:5.7.16 ports: - "32011:3306" volumes: - ./data/:/var/lib/mysql - ./conf.d/:/etc/mysql/conf.d environment: - MYSQL_ROOT_PASSWORD=liumiaocn - MYSQL_DATABASE=jira - MYSQL_USER=jira - MYSQL_PASSWORD=liumiaocn command: --character_set_server=utf8 --collation-server=utf8_general_ci restart: "no" # Ticket Management service: jira jira: image: jira:7.5.0 ports: - "32043:8080" volumes: - ./jira:/var/atlassian/application-data/jira links: - mysql:mysql restart: "no" [root@server-228 jira]#
- 确认server端字符集 示例结果日志如下所示:
mysql> show variables like '%character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec) mysql>总结
虽然是备份恢复时出现的问题,但是很多情况可能与此相关,比如安装时选定中文,但缺省数据库却没有进行utf8的设定,可能也会出现类似的问题,可同样进行对应即可。