👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主
⛪️ 个人社区:个人社区
💞 个人主页:个人主页
🙉 专栏地址: ✅ Java 中级
🙉八股文专题:剑指大厂,手撕 Java 八股文
文章目录
- 1.问题背景
- 2.遇到此类问题如何分析解决呢?
- 1、先连接mysql 查看对应的表存储的是否是中文
- 2、系统是否是设置了正确的支付编码:
- 3、检查数据库是否设置了正确的字符编码;
- 4、项目是否指定了正确的字符编码
1.问题背景
今天遇到一个现场问题,客户侧通过系统在界面保存一条数据,其中数据的title是中文,保存成功后,界面上中文显示一串问号。
2.遇到此类问题如何分析解决呢?
首先梳理排查思路:
1、是否是显示问题
2、系统是否是设置了正确的支付编码;
3、检查数据库是否设置了正确的字符编码;
3、项目是否指定了正确的字符编码;
四个步骤逐步排查:
1、先连接mysql 查看对应的表存储的是否是中文
连接进入查看数据库也存储的是???,那么也就是不是显示问题了。
2、系统是否是设置了正确的支付编码:
首先通过命令 locale 查看系统字符编码
系统是默认的字符编码,我们可以设置下,然后可以通过下面命令查看系统支持哪些字符编码:
locale -am|grep zh
我们可以选择 zh_CN.utf8, 可以通过以下方法:
vi /etc/profile
增加配置
export LC_ALL=zh_CN.utf8
export LANG=zh_CN.utf8
然后保存,执行 source /etc/profile,通过命令 locale 或者 echo $LANG 都可以查看是否生效;
完成上面修改后,我们到界面上测试,发现还是问号;
那么我们再进行第二步排查。
3、检查数据库是否设置了正确的字符编码;
这个有两种方式,第一种看配置文件
vi /etc/my.cnf
查看 [mysqld]、 [mysql] 下的字符编码:
第二种,通过mysql 客户端链接mysql,执行 show variables like ‘%char%’查看:
从这里可以看出 mysql 保存的编码是对的,但是为了一定确认没问题,我们可以做个小测试,创建一个测试表
CREATE TABLE `test` (`test` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后插入一条数据检查
insert into test (test) value ('张三');
然后执行查询语句:
select * from test;
验证后发现也能正常显示中文。
然后我只能怀疑是项目的编码设置的有问题了。
4、项目是否指定了正确的字符编码
于是我修改了 springboot 项目的启动文件,增加一段配置:
-Dfile.encoding=UTF-8
然后重启应用,再次到界面添加中文测试,发现已经可以解决问题了。
精彩专栏推荐订阅:在下方专栏👇🏻
✅ 2023年华为OD机试真题(A卷&B卷)+ 面试指导
✅ 精选100套 Java 项目案例
✅ 面试需要避开的坑(活动)
✅ 你找不到的核心代码
✅ 带你手撕 Spring
✅ Java 初阶