专栏首页散尽浮华[原创]Gerrit中文乱码问题解决方案分享

[原创]Gerrit中文乱码问题解决方案分享

应开发同事的要求,部署了Gitlab+Gerrit+Jenkins的持续集成环境.

但是发现了一个问题,Gerrit登陆后有中文乱码出现.

具体情况如下:

(1)Git代码中的中文乱码处理:

为妥善解决中文编码的问题,对所有git repository做如下约定: 所有文本文件都必须存储成utf8编码 全局配置如下: git config --global core.quotepath false git config --global i18n.logoutputencoding utf8 git config --global i18n.commitencoding utf8

另外:安装gerrit的时候对于数据库(选择myqsl方式的话)的编码设定为utf8

(2)Gerrit登陆后,设置中文用户名出现乱码

即在“Full name”一栏中输入中文名后,刷新一下就会出现“???”的乱码,如下:

后来想到,可能是在创建gerrit数据库的时候没有自定义编码为utf8

登陆数据库,查看编码:

mysql> show variables like '%character%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | character_set_client        | utf8 | | character_set_connection | utf8 | | character_set_database    | utf8 | | character_set_filesystem  | binary | | character_set_results       | utf8 | | character_set_server    | latin1 | | character_set_system       | utf8 | | character_sets_dir | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec)

发现直接查询目标表,不支持中文:

mysql> use gerritdb; Database changed mysql> select full_name,account_id from accounts; +-----------+------------+ | full_name | account_id | +-----------+------------+ | daizizhe | 5 | | gerrit | 1 | | jenkins | 3 | | wangshibo | 2 | +-----------+------------+ 4 rows in set (0.00 sec)

mysql> update accounts set full_name = "王士博" where account_id = 2; Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1

mysql> select full_name,account_id from accounts; +-----------+------------+ | full_name | account_id | +-----------+------------+ | ???           | 2 | | daizizhe     | 5 | | gerrit        | 1 | | jenkins      | 3 | +-----------+------------+ 4 rows in set (0.00 sec) 

解决办法:

**********************************************

首先保证服务器的系统编码是支持中文的

[root@115 ~]# cat /etc/sysconfig/i18n LANG="zh_CN.UTF-8"

**********************************************

修改mysql数据库编码为utf8,支持中文

1)临时修改character_set_server的编码

mysql> character_set_server='utf8'; 

2)永久性生效

修改mysql服务的配置文件/etc/my.cnf

[root@115 ~]# vim /etc/my.cnf

.......

[mysqld]

......

character_set_server = utf8            【添加这一行内容】

然后重启mysql服务

[root@115 ~]# /etc/init.d/mysqld restart Shutting down MySQL. [确定] Starting MySQL.. [确定]

**********************************************

已经修改了mysql的编码,保证各个编码参数均为utf8了,如下:

mysql> show variables like '%character%'; +--------------------------+----------------------------------+ | Variable_name | Value | +--------------------------+----------------------------------+ | 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 | /usr/local/mysql/share/charsets/ | +--------------------------+----------------------------------+ 8 rows in set (0.00 sec)

但是发现Gerrit里面的“Full name”设置成中文名还是乱码

最后发现这是因为“Full name”字段所在的表结构了就已经写死了编码为latin1 

先mysqldump到处gerritdb数据库

[root@115 ~]#mysqldump gerritdb -p > gerritdb.sql

然后查看gerritdb.sql备份文件

发现gerritdb库里所有表的编码都是latin1啊!!!!

[root@115 ~]#vim gerritdb.sql

补救措施:

现将gerritdb.sql备份文件里的latin1_bin替换成utf8_general_ci

再将gerritdb.sql备份文件里的latin1替换成utf8

vim替换如下:

:%s/latin1_bin/utf8_general_ci/g :%s/latin1/utf8/g

接着删除gerritdb数据库

再创建空的gerritdb库,创建的时候指定编码为utf8

mysql>drop database gerritdb;

mysql>create database gerritdb CHARACTER SET utf8 COLLATE utf8_general_ci;

最后再将修改好的gerritdb.sql备份文件(已经修改编码为utf8了)导入到gerritdb空库呢

[root@115 ~]#mysql  gerritdb -p < gerritdb.sql

检查下,发现可以支持中文了

mysql> use gerritdb; Database changed mysql> select full_name,account_id from accounts; +-----------+------------+ | full_name | account_id | +-----------+------------+ | daizizhe | 5 | | gerrit | 1 | | jenkins | 3 | | wangshibo | 2 | +-----------+------------+ 4 rows in set (0.00 sec)

mysql> update accounts set full_name = "王士博" where account_id = 2; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0

mysql> select full_name,account_id from accounts; +-----------+------------+ | full_name | account_id | +-----------+------------+ | daizizhe       | 5 | | gerrit          | 1 | | jenkins        | 3 | | 王士博          | 2 | +-----------+------------+ 4 rows in set (0.00 sec)

mysql>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 分布式监控系统Zabbix-3.0.3-完整安装记录(4)-解决zabbix监控图中出现中文乱码问题

    之前部署了Zabbix-3.0.3监控系统,在安装数据库时已经将zabbix库设置了utf-8字符。 首先确定zabbix开启了中文支持功能: 登录到zabbi...

    洗尽了浮华
  • mysql操作命令梳理(4)-中文乱码问题

    在平时的mysql运维操作中,经常会碰到插入中文字段后出现乱码的情况,产生中文乱码的原因一般有: 1)mysql的编码格式不对,是latin1编码。强烈推荐将m...

    洗尽了浮华
  • Mycat基础知识和运用总结

    系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展...

    洗尽了浮华
  • Mysql设置UTF-8字符集

    [windows下安装mysql及设置字符集]http://blog.csdn.net/dream_an/article/details/51058710

    王小雷
  • Ubuntu16.04中MySQL5.7设置UTF-8编码

    今天遇到了一个奇葩的问题 呃呃,难受,在使用mysql创建表的时候就是输入中文就报错,后来一看mysql的编码格式,吓我一跳,从没有用过的格式:latin1这个...

    Debug客栈
  • 修改及查看mysql数据库的字符集

    Liunx下修改MySQL字符集: 1.查找MySQL的cnf文件的位置 find / -iname ‘*.cnf’ -print /usr/share/mys...

    小小科
  • Docker安装mysql

    此时已经连接成功了,也可以通过docker命令docker inspect congtainerId查看挂载内容

    河岸飞流
  • 为什么Docker创建的MySQL容器字符乱码?

    这篇文章发布于 2016.11.03 ,记录如何解决 mysql容器查询结果乱码的问题。

    用户1560186
  • Linux下MySQL 5.5/5.6的修改字符集编码为UTF8(彻底解决中文乱码问题)

    昨天在CentOS 7上遇到MySQL 5.6遇到乱码问题,特此总结一下: 一、登录MySQL,用SHOW VARIABLES LIKE ‘character%...

    九州暮云
  • MySQL字符集乱码

    版权声明:本文为博主原创文章,欢迎扩散,扩散请务必注明出处。 https://blog.csdn....

    Leshami

扫码关注云+社区

领取腾讯云代金券