JDBC 连接 MySQL 中文乱码问题

JDBC 连接 MySQL 中文乱码问题

前言

最近在写小项目,用到了上个月刚学的mysql和 JDBC,在java查询时出现了中文乱码,在网络上查询资料,发现相关问题比较混乱,故整理一下解决方法。

原因

字符集不匹配

运行环境

  • MyEclipse2014
  • JDK1.7
  • mysql-connector-java-5.1.47
  • MySQL5.7
默认字符集内容
MySQLLatin1(ISO-8859-1)单字节编码,向下兼容ASCII
MyEclipse2014GBK(汉字内码扩展)双字节编码,向下兼容GB 2312,向上支持 ISO 10646
通用UTF-8(万国码)可变长度字符编码,兼容ISO-8859-1,兼容ISO 10646

所以把运行环境的字符集格式统一就行了吗,太天真了→_→

解决方法

MyEclipse

对于MyEclipse的字符集修改在项目的属性里
在这里插入图片描述
这个操作是要在项目创建时就进行,不能在编写代码后进行,不然中文注释就乱码了o(╥﹏╥)o

一劳永逸的解决方法是对整个MyEclipse的默认字符集进行修改
Window——perferences

在这里插入图片描述
当然,你可以搜索encoding将所有字符集都修改一下(不推荐)
在这里插入图片描述在这里插入图片描述

MySQL(重点

MySQL的编码修改是坑最多的

如果你查资料会找到一个SQL语句show variables like '%char%'用来查看字符集

在这里插入图片描述

解释
character_set_client设置客户端字符集
character_set_connection设置连接字符集
character_set_database设置数据库默认字符集,character_set_database显示的和character_set_server一致
character_set_filesystem把os上文件名转化成此字符集,即把 character_set_client转换character_set_filesystem,默认binary是不做任何转换的
character_set_results设置结果字符集
character_set_server设置服务器字符集
character_set_system设置系统字符集
character_set_dir设置字符集安装目录

修改语句为set character_set_XXXX=XXXX;
在这里插入图片描述你以为到这就结束了吗,不真正的坑出现了

当你关闭当前查询,使用JDBC时发现,还是乱码,回头一看,一切又被改回来了o(╥﹏╥)o

治标还要治本

前面的更改只在那个Session(会话)中,相当于临时修改,要永久修改还要修改mysql配置文件
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini中的字符集设置

一共两处
[mysql]下面的default-character-set,将注释#去掉,加上你要字符集
[mysqld]下面的character-set-server同理

然后重启mysql服务,就行了
在这里插入图片描述
虽然这样就可以,统一字符集

不过在写连接字符串时还是要加上参数
jdbc:mysql://127.0.0.1:3306/game?useUnicode=true&characterEncoding=UTF-8

保险一些

总结

虽然一般操作数据库都是用框架,配置简单,但使用底层接口操作,遇到的麻烦更能锻炼人,更能深入底层,分析背后的变化,对基本功要求更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值