java mysql地址中的 useUnicode=true&characterEncoding=utf-8

本文深入解析MySQL中的useUnicode与characterEncoding配置项,阐述其对客户端与服务端数据交互编码的影响,以及如何避免乱码问题。

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

useUnicode=true 后面的配置 characterEncoding配置才能生效

 

characterEncoding=utf-8的配置的作用主要配置的是mysql服务端的编码,mysql驱动的代码中,会将将要发送mysql服务端的sql使用characterEncoding指定的值进行转码,然后将转码后的字节发送到mysql服务端

 

而mysql服务端响应的编码是如何转换的呢,主要是mysql服务端返回结果的时候,字节流的某一位标识的是当前字段的编码格式,mysql驱动程序在解析数据时,会使用mysql服务端返回的字段编码格式进行解码;解码后然后通过charset对象的decode方法进行转码,这个时候会根据自己项目当前的编码方式自动识别。

 

 

最后得出的结论:

1. useUnicode=true&characterEncoding=utf-8  主要配置的客户端发送数据到服务端时候,需要转换成什么样的编码发送给服务端

2. 客户端接收到的数据不会出现乱码,有一个前提,就是数据库中的数据编码没有错误的情况下

 

官方也建议我们characterEncoding这个值的配置尽量与mysql服务端的编码一致

如果不一致,会导致我们看到的结果出现乱码

 

比如: mysql服务端的编码为UTF-8  而这个时候我们配置了 useUnicode=true&characterEncoding=gbk

那么如果我们这时候插入了一条带有中文的数据,则此时mysql中的此中文数据为gbk的

然后我这时候查询这条数据,mysql会将gbk的数据返回给我们,但告诉我们说 这个是UTF-8编码的,这个时候mysql驱动包就会用UTF-8的编码去解码这段数据,这时候则会出现乱码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值