这篇文章介绍一下Jira在使用备份恢复时字符集出现问题的对应方法。
现象
在Jira进行迁移或者备份的时候,在新的Jira的实例中通过菜单导入之前备份的zip文件,如果字符集有问题,一般会出现如下图类似的错误信息:
原因
以本文碰到的问题为例,实际的问题是因为字符集的问题,从如下的MySQL的数据库的字符集编码可以看到
character_set_database的设定为latin1,所以对于utf8中的汉字无法正常动作。
对应
utf8 vs utf8mb4
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 | utf8 |
collation-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的设定,可能也会出现类似的问题,可同样进行对应即可。