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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

 

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

***************当你发现自己的才华撑不起野心时,就请安静下来学习吧***************
本文转自散尽浮华博客园博客,原文链接:http://www.cnblogs.com/kevingrace/p/5673390.html ,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
缓存 前端开发 开发工具
uniapp的git操作踩坑
uniapp的git操作踩坑
184 0
一键自动化博客发布工具,用过的人都说好(oschina篇)
使用一键自动化博客发布工具blog-auto-publishing-tools把博客发布到oschina上。
一键自动化博客发布工具,用过的人都说好(oschina篇)
|
Java 数据库
GitHub下载破千万!这份Java大厂面试指南,竟是阿里面试官上传的
本以为在大厂可以逃过35岁的坎儿,结果还没到35就遇上了大裁员。。。被裁的那一个月,我拿着公司给的2N在家躺了大半个月,刚开始是不甘,到后面每个月一万多的房贷催着我不得不重新审视自己,随后踏上了海投之路。 结果现在的环境真的太卷了,严重打击我的自信心。大半夜找了还在阿里的哥们谈心喝酒,他也知道我现在的压力很大,帮我找他们公司的面试官要了一份简历模板和面试指南,据说是他们内部HR共享的资料。为了快点挣到钱,我二话不说开始背,然后成功收到了7家offer,最后选了一个我喜欢的(就是钱多的)成功入职。
|
8月前
|
Web App开发 JavaScript 前端开发
为掘金编写了一款简易版一键三连的油猴脚本(二)
为掘金编写了一款简易版一键三连的油猴脚本(二)
178 0
|
8月前
|
前端开发 JavaScript 开发者
为掘金编写了一款简易版一键三连的油猴脚本(一)
为掘金编写了一款简易版一键三连的油猴脚本
190 0
|
前端开发 JavaScript API
wordpress插件开发踩坑记
想要使用 REST API 需要自己额外安装插件:WordPress REST API,现在 WordPress 5.0以上的版本已经默认支持 REST API了,不需要额外去安装插件
153 0
|
Shell 网络安全 开发工具
SourceTree安装(小白特别详细教程)
SourceTree安装(小白特别详细教程)
384 0
|
IDE Java 程序员
新手学习eclipse使用(一)
新手学习eclipse使用(一)
|
缓存 Java 数据库连接
Myabtis源码如何阅读,教你一招!!!
Myabtis源码如何阅读,教你一招!!!
|
Android开发
AndroidStudio 前言中不允许有内容
AndroidStudio 前言中不允许有内容
511 0