JDBC往MySql数据库中写汉字出现乱码的问题

本文介绍了一种解决MySQL数据库中中文乱码的方法,通过修改数据库的字符集为GBK,并更新my.cnf配置文件来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 情况描述:
我的情况是这样,首先我的项目的编码格式是UTF-8,客户端请求时的编码也是UTF-8,在项目配置文件的数据库路径也设置了UTF-8格式编码,如下:
spring.datasource.url=jdbc:mysql://192.168.11.139/samp_db?useUnicode=true&AutoReconnect=true& characterEncoding=utf-8&useSSL=false,通过打点调试结果是 客户端请求传递过来的数据(当然数据是String类型的汉字)是正常的,把数据插入到MySql数据库中就变成了乱码,根据网上大多说法这是MySql数据库编码的问题,下面就来看看如何修改MySql数据库编码。
二 修改MySql数据库编码步骤
1 查看当前自己数据库系统的编码格式
先进入MySQl环境下:
$ /usr/local/mysql/bin/mysql -u root -p 按Enter键
Enter password: 输入自己数据库的密码 ,按Enter键
成功进入后输入如下命令:
mysql> show variables like '%char%'; 按Enter键 会出现类似下面的结果:
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.19-macos10.12-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.01 sec)
上面红色部分的编码格式是 latin1 ,我们想要解决上述乱码的问题需要把 character_set_database character_set_server 的编码格式改为gbk.
2 关闭mysql服务
在系统偏好设置中,可以直接在右上角的搜索框输入mysql就行搜索,找到后直接点击stop mysql server 就好。
3 创建my.cnf文件
另外打开一个终端新窗口,输入如下命令:
$ sudo vi /etc/my.cnf 按Enter 进入编辑界面,
当然如果这个文件已经存在你也可以通过这种方式打开这个文件进行编辑,这种情况下
你只需default-character-set 、character-set-server对应的编码格式改为gbk就可以了。
要是新创建的my.cnf 文件把如下代码复制粘贴过去
[client]
default-character-set= gbk
[mysqld]
character-set-server= gbk
最后 按esc ,输入:wq! 保存退出编辑。
4 参考步骤2重启mysql server
这是时候我们再返回第一次打开的终端窗口,再次输入show variables like '%char%'; 按Enter键 会出现类似下面的结果:
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | gbk |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | gbk |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.19-macos10.12-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.01 sec)
可以看出 character_set_database character_set_server 的编码格式变为了gbk。
然后再往mySql数据库中写数据时,乱码消失了。


有人可能会质疑请求传递过的数据编码格式UTF-8 ,而数据库的编码格式是gbk,反而没有出现乱码,在往数据库中写数据的过程中系统自动完成了这种格式的转换。
参考:






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值