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

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的编码去解码这段数据,这时候则会出现乱码

上一篇:eclipse写入mysql出现乱码


下一篇:springboot整合mybatis时java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is un