当前位置: 首页 > 图灵资讯 > 技术篇> 解决JDBC与Mysql中文乱码现象

解决JDBC与Mysql中文乱码现象

来源:图灵教育
时间:2023-06-17 13:54:17

用JDBC连接数据库打印输出时,出现了中文乱码的问题。Mysql和网页的情况如下:

 

解决JDBC与Mysql中文乱码现象 _mysql

  Mysql乱成一窝粥。

  

解决JDBC与Mysql中文乱码现象 _编码格式_02

  网页的情况也不乐观...

  通过数据搜索,发现是因为编码格式的问题。根据网络上的方法,将Mysql的编码格式和JDBC的部分代码修改为:

解决JDBC与Mysql中文乱码现象 _编码格式_03

  Mysql命令使用sett Variable_name=utf8;(如set character_set_client=utf8;),或者Mysql中的my.在ini文件中,将[client]和[mysql]default-character-set=后面改为utf8,然后在[mysqld]下面加一句character-set-server=utf8。

解决JDBC与Mysql中文乱码现象 _编码格式_04

  在JDBC中,UseUnicodede是在连接到Mysql的url后面添加的=true&characterEncoding=utf-8。

  按照网上策略,完成这两个步骤就完成了。

  结果在我这里还是不行,还是乱码。

  于是开始疯狂尝试...在3.、经过四个小时的努力,终于找到了解决方案。

  Mysql和JDBC再次修改如下:

解决JDBC与Mysql中文乱码现象 _编码格式_05

  Mysql修改character_set_client和character_set_results为gbk。

  

解决JDBC与Mysql中文乱码现象 _编码格式_06

  JDBC部分在方法开头加了一句responsee.setCharacterEncoding("gbk");

  看了一圈文章,觉得csdn的一个大佬说得很好:

  "mysql控制台输入的数据默认编码为gbk,但mysql服务器根据utf-8分析保存数据。因此,保存的数据必须是无序的。

读取数据库的数据,mysql按utf-8编码传输到控制台,但控制台默认按gbk分析,所以显示的数据必然会出现代码混乱。”

  也就是说,要想正常插入中文,正常读取数据输出为中文,必须修改character_set_client和character_set_results为gbk格式。

  8个 character_set 变量说明:  一、character_set_client

    主要用于设置客户端使用的字符集。

  二、character_set_connection

    连接数据库时的字符集主要用于设置,如果连接数据库中使用的字符集类型没有在程序中注明,则按此字符集设置。

  三、character_set_database

    默认创建数据库的编码格式主要用于设置。如果在创建数据库时没有设置编码格式,则按此格式设置。

  四、character_set_filesystem

    文件系统的编码格式将操作系统上的文件名转换为这个字符集,即 character_set_client转换character_set_filesystem, 默认binary不做任何转换。

  五、character_set_results

    如果没有指明数据库返回客户端时使用的编码格式,则使用服务器的默认编码格式。

  六、character_set_server

    该变量建议由系统自行管理,而不是人为定义服务器安装时指定的默认编码格式。

  七、character_set_system

    数据库系统使用的编码格式一直是utf8,不需要设置。它是存储系统元数据的编码格式。

  八、character_sets_dir

    本变量是字符集安装的目录。

  JDBC部分的修改是自己尝试的,具体原理不是很确定,怕误导就不多说了。

  Mysql和页面的成功运行如下:

  

解决JDBC与Mysql中文乱码现象 _编码格式_07