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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

 

应开发同事的要求,部署了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 ,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
域名解析 网络协议 Ubuntu
虚拟机ip不停地变每次使用ssh不好登录?有手就行!
虚拟机ip不停地变每次使用ssh不好登录?有手就行!
583 1
|
敏捷开发 监控 安全
你的项目质量度量指标有哪些?
你的项目质量度量指标有哪些?
842 0
|
网络安全 开发工具 数据安全/隐私保护
五分钟带你玩转sonar(五)教你使用SonarLint插件
五分钟带你玩转sonar(五)教你使用SonarLint插件
5398 0
五分钟带你玩转sonar(五)教你使用SonarLint插件
|
6月前
|
移动开发 前端开发 JavaScript
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
702 0
|
Java Linux 开发工具
Linux部署 Gerrit 教程 ——2023.07
Linux部署 Gerrit 教程 ——2023.07
1165 0
|
9月前
|
人工智能 算法 程序员
揭秘 AI 编程工具的费用真相:2025 年开发者视角-优雅草卓伊凡
揭秘 AI 编程工具的费用真相:2025 年开发者视角-优雅草卓伊凡
588 1
揭秘 AI 编程工具的费用真相:2025 年开发者视角-优雅草卓伊凡
|
7月前
|
开发工具 git 索引
如何使用Git的暂存区来管理代码更改?
如何使用Git的暂存区来管理代码更改?
1141 0
|
开发工具 git
Git的正确使用姿势与最佳实践
本文介绍了在现代软件开发中使用Git的一些最佳实践,以帮助开发人员更好地掌握Git的正确使用方法。这些实践包括合理的分支管理策略、频繁提交和有意义的提交信息、定期拉取主分支并解决冲突、代码审查、使用标签进行版本控制、避免在主分支上直接提交代码、使用.gitignore文件、学会使用Rebase、备份和远程仓库、以及持续学习与实践。这些实践有助于提高团队的协作效率,同时也有助于保持项目的稳定性和可维护性。正确使用Git需要积累经验,不断学习和实践。
1534 0