JDBC连接MySQL数据库时出现的乱码问题

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/79921841

  昨天有学生问我:为什么在插入MySQL数据库时出现了中文乱码的问题? 对于他的问题,我也做了一个详细的分析总结,方便以后学生再遇到类似的问题时,可以更好的解决。。
  
  首先我来简单描述一下他的问题:

  他是在一个添加页面,输入了一组数据,点击“提交”插入到了数据库表中,再点击“查看全部”,发现刚才插入的数据出现了乱码问题,再用cmd窗口打开数据表,同样也是乱码。以下是截图:

添加数据页面

查看数据页面

出现乱码

  对于这个问题,我们可以从六个方面来考虑!

JDBC 连接 MySQL数据库时出现的乱码问题,从六个方面来考虑:

  一、在编写页面时就出现了乱码
  二、在浏览器解析时出现了乱码
  三、由 JSP编译器 在编译成 Servlet 时出现了乱码
  四、由数据库中的字段编码格式引起的乱码
  五、JDBC 连接 MySQL数据库 时,没有拼接 useUnicode=true&characterEncoding=utf-8 的参数
  六、MySQL中的编码设置的问题

(一般情况是由第四个方面和第五个方面引起的)

  下面我们重点讲解一下这六个方面出现乱码的原因,以及如何去解决,还有以后在写项目中如何养成良好的习惯防止类似问题再次发生。





一、在编写页面时就出现了乱码

  这个问题的可能性极小,举个简单的例子,就是原来编写文件的编码格式是 UTF-8,编写好后又改成了 GBK 编码格式,也没注意文件中的中文变成了乱码,就直接去浏览器中浏览了。

1、出现的原因

  可能我们在编写完文件后,对文件的编码格式又进行了改变,导致在文件中就出现了乱码,那自然在用浏览器浏览时也会出现乱码。

2、解决办法

  将原来的编码格式改回去。如果非要改变编码格式,就将出现乱码的地方重新输入中文。

  建议:我们尽量在编写文件前就对文件编码格式设置好,编写完文件尽量不要改变文件编码格式,如果非要改变,就再检查一下中文的地方是否出现了乱码。

二、在浏览器解析时出现了乱码

  首先来给大家简单解释一下ContentType 这个属性,这个属性主要是让浏览器以什么样的形式、什么编码格式来读取这个文件,也就是设置浏览器的解析方式。

  我们常见的设置方式:ContentType=”text/html; charset=UTF-8”(浏览器将以html的形式,编码格式为UTF-8来解析这个html文件)

1、出现的原因
  1)ContentType属性 可能没有设置 或 设置有误;
  2)可能手动更改过浏览器解析的编码格式,
2、解决办法

  检查是否正确设置了 ContentType 的值中编码格式。这里以 JSP页面举例,在第一行加以下代码:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

  如果是手动更改过浏览器解析的编码,请重新打开浏览器即可。

  建议:在编写页面时,一定要记住设置 ContentType属性,最好不要手动更改浏览器的默认解析编码。

三、由 JSP编译器 在编译成 Servlet 时出现了乱码

  这个方面是由 JSP页面 引起的,如果不是 JSP页面 引起的乱码,这方面因素可不用考虑。pageEncoding 这个属性主要是用来设置 JSP编译器在将JSP文件编译成Servlet时使用的编码格式。  

1、出现的原因

  JSP页面 中可能没有设置 pageEncoding 这个属性。

2、解决办法

  检查出现乱码的 JSP页面 是否设置pageEncoding 这个属性。如果没有设置,请在第一行加以下代码:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>

  建议:在编写 JSP页面 时,一定要在第一行写以上代码。

四、由数据库中的字段编码格式引起的乱码

  在 MySQL中,数据库、数据表、表字段都有自己的编码格式。
  
  点击这里可以学习如何查看和修改数据库、数据表、表字段的编码格式

1、出现的原因

  可能在建表的时候没有指定表或字段的编码格式,或者指定的编码格式和我们想要的编码格式不一致。

2、解决办法

  通过以下SQL语句查询引起乱码的字段的编码格式:

SHOW FULL COLUMNS FROM <表名>;

  如果查询出来的结果和我们想要的编码格式相同,则可以考虑其他方面的因素,若不一致,那就请再通过以下SQL语句修改出现乱码对应的字段的编码格式:

  ALTER TABLE <表名> MODIFY COLUMN <字段名> <字段类型> CHARACTER SET <编码格式>;

  建议:在建立表的时候我们最好设置一下默认的编码格式

五、JDBC连接 MySQL数据库 时,没有拼接 useUnicode=true&characterEncoding=utf-8 的参数

  useUnicode=truecharacterEncoding=utf-8 的意思是:使用Unicode编码,字符编码为UTF-8。因为UTF-8属于Unicode编码,所以要将 useUnicode 的属性值设为 true,两个参数最好全部加上。

1、出现的原因

  可能在 JDBC中 连接数据库时的URL后面忘记拼接 useUnicode=true&characterEncoding=utf-8 的参数。

2、解决办法

  找到 JDBC连接数据库 的URL,如果没有拼接 useUnicode=true&characterEncoding=utf-8 的参数,就在后面加上。

  注意:在xml配置文件中配置数据库URL时,要使用 & 的转义字符,也就是 &amp;(很多人死在了这个上面)


六、MySQL中的编码设置的问题

  以上方面都考虑过了,如果在cmd窗口中依然还出现问号的现象,那就应该是MySQL中的编码设置的问题了。
  
  点击这里查看关于 MySQL 的编码如何进行设置。

七*、JDBC 连接 MySQL良好的编码设置习惯

  我们在写代码中,要养成良好的编码设置习惯,将所有的编码全部设置成UTF-8,因为UTF-8是国际化的编码,又称为万国码(关于UTF-8编码,感兴趣的朋友可以上网查询资料,这里不作过多讲解),很多语言都支持UTF-8的编码,一般情况下不会产生错误的结果。

  1、将文件的编码格式改成 UTF-8编码格式,再开始编写代码;
  2、在页面中所有设置编码的地方全部设置成 UTF-8编码格式;
  3、在JDBC连接 MySQL的URL后一定要记住拼接useUnicode=true&characterEncoding=utf-8 这两个参数。



* 如果还出现其他的问题,请在评论区告诉我,谢谢~ *

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小异常

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值