[原创]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>
- uva----11729 Commando war (突击战争)
- uva-----11292 The Dragon of Loowater
- golang简单位运算示例
- 学编程,学单词.....在学习中积累自己的单词(不断更新__ing)
- 初学java之事件响应(结合接口来设置在同一个界面上!)
- 初学java之触发响应事件举例子
- 初学java之(盒子分布)
- java(课程设计之记事本界面部分代码公布)
- HDUOJ---1236 排名(浙大考研题)
- HDUOJ----1234 开门人和关门人(浙江大学考研题)
- HDUOJ----2571(命运)(简单动态规划)
- 初学java之面板布局的控制
- 初学java之常用组件
- go语言数组的拷贝
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 团体程序设计天梯赛-练习集 L1-001 Hello World
- 团体程序设计天梯赛-练习集 L1-002 打印沙漏
- 团体程序设计天梯赛-练习集 L1-003 个位数统计
- 团体程序设计天梯赛-练习集 L1-004 计算摄氏温度
- 团体程序设计天梯赛-练习集 L1-007 念数字
- 团体程序设计天梯赛-练习集 L1-008 求整数段和
- K8s多租户场景下的多层级namespace规则解析
- 团体程序设计天梯赛-练习集 L1-010 比较大小
- 团体程序设计天梯赛-练习集 L1-012 计算指数
- 团体程序设计天梯赛-练习集 L1-013 计算阶乘和
- 团体程序设计天梯赛-练习集 L1-036 A乘以B
- 团体程序设计天梯赛-练习集 L1-015 跟奥巴马一起画方块
- 团体程序设计天梯赛-练习集 L1-011 A-B
- vuepress引入vue-qr组件后build报错navigator is not defined问题
- 团体程序设计天梯赛-练习集 L1-022 奇偶分家