首页 > 数据库 >解决JDBC与Mysql中文乱码现象

解决JDBC与Mysql中文乱码现象

时间:2022-11-27 23:34:14浏览次数:53  
标签:编码 JDBC character 乱码 set Mysql 格式

  在用JDBC连接数据库进行打印输出的操作的时候,出现了中文乱码的问题。此时Mysql和网页状况如下:

  

  Mysql乱成一窝粥。

  

  网页的情况也是不容乐观……

  经过资料查找,弄明白了是因为编码格式的问题。按照网络上的方法,将Mysql的编码格式和JDBC的部分代码修改成:

  

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

   JDBC中则是在连接的Mysql的url后面加上useUnicode=true&characterEncoding=utf-8。

  按照网上的攻略,完成这两步操作就大功告成了。

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

  于是开始疯狂尝试……在3、4个小时的努力下,终于找出了解决方案。

  将Mysql和JDBC再次修改如下:

  

  Mysql修改character_set_client和character_set_results为gbk。

  

  JDBC在方法开头加一句response.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,character,乱码,set,Mysql,格式
From: https://www.cnblogs.com/Lider/p/16931009.html

相关文章

  • 网络编程及数据库MySQL总结
    目录网络编程并发知识网络编程知识网络编程软件开发架构计算机网络的相关专业名词OSI七层协议物理连接层数据链路层网络层传输层应用层socket模块黏包现象struct模块并发编......
  • MySQL进阶实战4,MySQL索引详解,下篇
    一、索引索引是存储引擎用于快速查找记录的一种数据结构。我觉得数据库中最重要的知识点,就是索引。存储引擎以不同的方式使用B-Tree索引,性能也各有不同,各有优劣。例如MyI......
  • MySql回表以及产生原因
    MySql回表以及产生原因在SQL优化里面经常提到,如在非主键索引的情况下尽量避免使用select*from;究其原因就是今天我要记录的Mysql回表查询。Mysql回表指的是在InnoDB存储......
  • MySQL进阶实战6,缓存表、视图、计数器表
    一、缓存表和汇总表有时提升性能最好的方法是在同一张表中保存衍生的冗余数据,有时候还需要创建一张完全独立的汇总表或缓存表。缓存表用来存储那些获取很简单,但速度较慢的数......
  • Centos7 yum 安装mysql8.0
    1.去mysql官网下载yum存储库包https://dev.mysql.com/downloads/repo/yum/  这里本人很早之前就下载过,就不重复下载了 2.安装mysqlyum......
  • MySQL InnoDB存储引擎索引:数据结构与算法原理和优化概述
    大家早上好!今天我为大家讲解的是MySQLInnoDB存储引擎索引的数据结构与算法原理和优化概述,大致分为这个部分分别给大家进行介绍。首先我们来看一下MySQL整体的架构,MySQL大......
  • 数据库MySQL
    目录数据库MySQL一、数据库基础知识以及典型数据库MySQL简介1、存储数据的演变史2、数据库软件的应用史3.数据库的本质4.数据库的分类5.MySQL简介6.MySQL基本使用7.制作系......
  • MYSQL SQL语句查询关键字
    首先先创建一组数据createtableemp(idintprimarykeyauto_increment,namevarchar(20)notnull,genderenum('male','female')notnulldefault'male',......
  • springBoot mybatis-plus mySql代码生成器
    一、用到的依赖参考官网<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/X......
  • MySQL数据库之索引
    一、索引的概念索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于c语言的链表通过指针指向数据记录的内存地址)。使用索引后可......