应开发同事的要求,部署了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. Cygwin 各种情况下中文乱码--终极解决方案

    0.引言 本人从进公司以来一直负责公司Android平台下产品的NDK开发,用的工具: 01. Google的adt-bundle(集成了eclipse和sdk) 02. NDK 03. Cygwin ...

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

    使用Kettle在不同的数据库抽取数据时,有时会出现中文乱码问题:其解决方案如下: 1.查看数据库的字符集是否是UTF-8(最常用的字符集) 2.如果数据库设置正确仍然存在中文乱码,则可能是因为有的客 ...

  3. C# 读取oracle 中文乱码的解决方案

    用OracleDataAccess.dll访问oracle数据库,遇到中文乱码的情况. 解决方案如下: 1查看字符集编码, 在数据库服务器端 启动 sqlplus SQL->select use ...

  4. Spring Boot 中文乱码问题解决方案汇总

    使用 Spring Boot 开发,对外开发接口供调用,传入参数中有中文,出现中文乱码,查了好多资料,总结解决方法如下: 第一步,约定传参编码格式 不管是使用httpclient,还是okhttp,都 ...

  5. mysql插入表数据中文乱码问题解决方案

    一.问题 开发中遇到将其它数据库数据插入到mysql数据库表中一直会报类似如下错误: Incorrect string value: '\xE6\x88\x91' for column 'name' ...

  6. 关于 IntelliJ 的 IDEA PyCharm 等更新 2019.2 后中文乱码 的解决方案

    关于IntelliJ 的2019.2 更新后的中文乱码解决方案 设置 备用字体 file -> Setting -> Editor ->Font 由于编程常用英文首选字体font默认 ...

  7. xampp3.2下mysql中文乱码终极解决方案

    xmapp3.2.2中mysql已经被替换成了Mariadb,网上那些显示char语句已经失灵. 另外本文主要介绍的是手动在mysql中写入中文乱码问题 那么我们将采用如下三个步骤解决乱码问题 1.打 ...

  8. MySql 中文乱码排查解决方案

    MySQL会出现中文乱码的原因不外乎下列几点: server本身设定问题,例如还停留在latin1 table的语系设定问题(包含character与collation) 客户端程式(例如php)的连 ...

  9. eclipse中文乱码问题解决方案

    eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

随机推荐

  1. SharePoint服务器端对象模型 之 访问用户、用户组和权限(Part 1)

    (一)概述 SharePoint权限系统是整个SharePoint体系中一个比较重要的部分,权限系统主要分成两大部分:认证和授权. 认证主要解决的问题是判断登陆者是否合法,以及他究竟是哪一个用户,Sh ...

  2. 正确匹配URL的正则表达式

    网上流传着多种匹配URL的正则表达式版本,但我经过试验,最好用的还是从stackoverflow上查到的: (https?|ftp|file)://[-A-Za-z0-9+&@#/%?=~_| ...

  3. C安全编码--数组

    建议和规则 建议: 理解数组的工作方式 获取数组的长度时不要对指针应用sizeof操作符 显示地指定数组的边界,即使它已经由初始化值列表隐式地指定 规则: 保证数组索引位于合法的范围内 在所有源文件中 ...

  4. 解析plist文件(字典里包着数组,数组中又包含字典)

    #import "RootTableViewController.h" #import "City.h" @interface RootTableViewCon ...

  5. 为Xcode添加和备份快捷代码

    有IOS开发经验的,相信你一定了解快捷代码的使用以及可以自定义代码,备份到XCode右下角,供下次使用. 那么,快捷代码备份到本地什么位置呢: 位置:~/Library/Developer/Xcode ...

  6. iOS开发中的一些定时器

    在软件开发过程中,我们常常需要在某个时间后执行某个方法,或者是按照某个周期一直执行某个方法.在这个时候,我们就需要用到定时器. 然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资 ...

  7. javascript对象模型和function对象

    javascript中,函数就是对象 <html> <head> <script type="text/javascript"> functio ...

  8. linux把EDT时间修改为CST格式

    初始时间:2012年 09月 14日 星期五 18:15:33 EDT [root@test ~]# mv /etc/localtime /etc/localtime.bak [root@test ~ ...

  9. mac:ssh登陆总是需要输入钥匙串密码解决

    方法1: finder -> 左上角:前往->按住option建->多出一个资源->KeyChains->第一个文件夹(删除掉次文件夹) 然后重启即可 方法2: ssh- ...

  10. CI框架SESSION重写

    这个是我平时用的是 PHP 自己的 Session 机制,是真正的 PHP Session,存储在服务器端,而不是用的 cookie 接口完全兼容于 CI 2.0.x 的 Session 类库,也就是 ...