关键词搜索

源码搜索 ×
×

Jira基础:备份恢复时字符集出现问题的对应方法

发布2020-02-14浏览648次

详情内容

这篇文章介绍一下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_serverutf8

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> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    总结

    虽然是备份恢复时出现的问题,但是很多情况可能与此相关,比如安装时选定中文,但缺省数据库却没有进行utf8的设定,可能也会出现类似的问题,可同样进行对应即可。

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载