应开发同事的要求,部署了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>

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

  1. 使用Kettle抽取数据时,出现中文乱码问题解决方案

    使用Kettle抽取数据时,出现中文乱码问题解决方案 参考文章: (1)使用Kettle抽取数据时,出现中文乱码问题解决方案 (2)https://www.cnblogs.com/yiyezhiqiu ...

  2. python3.x+requests 爬取网站遇到中文乱码的解决方案

    正常情况下,遇见问题上google找答案能甩百度100条街,但是这个问题是个例外······人家老外就没有乱码的问题.言归正传,首先建议大家看一下python3.x+requests 爬取网站遇到中文 ...

  3. sublime java文件乱码问题_Sublime Text 打开Java文档中文乱码的解决方案

    问题: 打开文档后出现中文乱码如图 1.在安装插件之前,首先要安装package control这个组件,才能够给sublime text安装各种插件 打开sublime text,按 ctrl+` ...

  4. 安装mysql中文步骤_MySql安装步骤图文教程及中文乱码的解决方案

    mysql server安装步骤如下所示: 1安装mysql server 2 安装mysqlserver管理工具 解压中文语言包,将文件复制到安装目录下覆盖 文件覆盖后,打开软件设置语言为中文(cn ...

  5. [HttpClient]HTTPClient PostMethod 中文乱码问题解决方案(2种)

     HTTPClient PostMethod 中文乱码问题解决方案(2种) Apache HttpClient ( http://jakarta.apache.org/commons/httpcl ...

  6. eclipse 编辑 python 中文乱码的解决方案

    eclipse 编辑 python 中文乱码的解决方案 参考文章: (1)eclipse 编辑 python 中文乱码的解决方案 (2)https://www.cnblogs.com/mouseIT/ ...

  7. dev代码拷贝中文乱码的解决方案

    dev代码拷贝中文乱码的解决方案 参考文章: (1)dev代码拷贝中文乱码的解决方案 (2)https://www.cnblogs.com/cmyg/p/8766732.html (3)https:/ ...

  8. ubuntu命令行下中文乱码的解决方案

    ubuntu命令行下中文乱码的解决方案 参考文章: (1)ubuntu命令行下中文乱码的解决方案 (2)https://www.cnblogs.com/york-hust/archive/2012/0 ...

  9. 【QT5.3】VS2013+QT5.3 中文乱码问题 解决方案

    VS2013+QT5.3 中文乱码问题 解决方案 网上很多关于QT中文乱码的问题及答案,但情况不同解决方法也不一样. 本方案适用于VS2013+QT5.3环境(编译器是VC) using namesp ...

最新文章

  1. LOJ2586 APIO2018 选圆圈
  2. 学习如何写 Bug 的一天! | 每日趣闻
  3. 网络编程学习笔记(gethostbyname2函数与IPv6支持)
  4. 20155327《Java程序设计》第二周学习总结
  5. deedeedee crazy 寒假逆向生涯(11/100)
  6. 论文,范围管理(2017上)
  7. Apache Camel 3.1 – XML路由的快速加载
  8. 有关SQL Server事务日志的十大文章
  9. C++ 上用 ONNXruntime 部署自己的模型
  10. 三星固态硬盘装linux,三星T5 SSD制作ubuntu18.04随身携带即插即用与win10共享文件真爽~(简单粗暴安装大法一步到位)...
  11. tkmybatis 权威指南 官方文档
  12. ubuntu查看像素坐标和像素值GUI工具 【 mtpaint 】
  13. c语言lookup函数怎么用,lookup函数的使用方法,lookup函数怎么用?
  14. java 文件服务器搭建_NFS文件共享服务器的搭建
  15. 脉冲时间宽度c语言,什么是脉冲宽度_脉冲宽度是什么意思
  16. cba篮球暂停次数和时间_篮球比赛一节有几次暂停?
  17. c语言api获取百度地图,H5调用百度地图API获取地理位置
  18. Python描述数据结构之链队列篇
  19. 我敢说,没人能超过这份产品经理推荐书单(40本)!
  20. 基因数据处理44之cloud-scale-bwamem安装

热门文章

  1. 1月国内操作系统市场:Windows XP份额高达60.84%
  2. server-send event object
  3. asp.net mvc 3 unobtrusive client side validation not working in IE
  4. 网络系统传输负载测试
  5. 我所感兴趣的iOS10新特性
  6. mono和monodevelop源码编译安装
  7. centos 扫毒软件clamAV安装
  8. 数组的有关属性和方法
  9. Maven+mybatis教程
  10. C++基本要点复习--------coursera程序设计实习(PKU)的lecture notes