当前位置: 主页 > JAVA语言

java链接数据库-恋爱随意链接本子库

发布时间:2023-04-21 10:05   浏览次数:次   作者:佚名

今天小编给大家分享一下Java中使用jdbc连接数据库中文出现乱码如何解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、使用jdbc连接数据库,插入数据库时,数据里的数据显示乱码,为 " ??? "

两种解决方案:

1、修改服务端的MySQL配置文件,编辑my.cnf文件,在[mysqld]下添加一行character_set_server = utf8,然后重启mysql服务

2、使用jdbc连接时,指定正确的编码,jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8

二、为什么配置了character_set_server = utf8,jdbc连接时就可以不指定编码

查阅官方文档,jdbc在连接数据库时,会先查询服务端的character_set_server值,再确定连接时使用的编码。要想覆盖客户端的自动检测编码功能,可以使用characterEncoding属性

程序员的自我修养:链接、装载与库_java链接数据库_恋爱随意链接本子库

文档地址:

三、MYSQL的字符处理机制是怎样的,为什么jdbc不指定编码或者服务端不设置character_set_server=utf8会导致乱码

先查看下MYSQL的字符集

程序员的自我修养:链接、装载与库_java链接数据库_恋爱随意链接本子库

解释下这几个参数:

程序员的自我修养:链接、装载与库_java链接数据库_恋爱随意链接本子库

character_set_client:客户端来源数据使用的字符集

character_set_connection:连接层字符集

character_set_database:当前选中数据库的默认字符集

character_set_filesystem:把os上文件名转化成此字符集,默认binary是不做任何转换的

character_set_results:查询结果字符集

java链接数据库_程序员的自我修养:链接、装载与库_恋爱随意链接本子库

character_set_server:默认的内部操作字符集

character_set_system:系统元数据字符集

character_sets_dir:字符集的路径

修改服务端的mysql配置文件,编辑my.cnf文件,在[mysqld]下添加一行character_set_server = utf8,然后重启mysql服务,再去查询字符集:

恋爱随意链接本子库_java链接数据库_程序员的自我修养:链接、装载与库

程序员的自我修养:链接、装载与库_恋爱随意链接本子库_java链接数据库

然后了解下字符集转换流程:

插入数据:

服务端将数据由客户端(character_set_client)字符集转成character_set_connectionjava链接数据库,然后将character_set_connection字符集转成相应的字符集存储到磁盘中,这个相应的字符集会按照以下优先级来判断:

1、创建表时设置的字符集

2、创建库时设置的字符集

java链接数据库_恋爱随意链接本子库_程序员的自我修养:链接、装载与库

3、character_set_database字符集

4、character_set_server字符集

查询数据:

服务端将数据由存储在磁盘中的字符集,转换成character_set_results字符集,返回给客户端

然后分析下

1、jdbc不设置characterEncoding=utf8,服务端character_set_server为latin1,jdbc以latin1字符集连接数据库java链接数据库,数据库服务端将latin1转成utf8然后存储到磁盘(因为character_set_connection和创建表指定的字符集都是utf8),这时就造成了乱码

2、jdbc不设置characterEncoding=utf8,服务端character_set_server为utf8,或者jdbc设置characterEncoding=utf8,jdbc都以utf8字符集连接数据库,数据库服务端以utf8存储到磁盘,这时数据就是正常的

以上就是“Java中使用jdbc连接数据库中文出现乱码如何解决”这篇文章的所有内容,感谢各位的阅读!