`
superhj1987
  • 浏览: 205684 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于jdbc操作MySql数据库中文乱码的问题

阅读更多

在写java操作mysql数据库的代码时会遇到查询出的结果或者插入到数据库中的数据中文乱码的现象。这种现象是怎么出现的呢?原理是怎样的呢?  

首相,mysql数据库中的东西都是二进制存放的,支持任何数据,当然包括中文。乱码的产生在于联系java与mysql的那一层即jdbc driver。   

java 内部使用 unicode ,而mysql 缺省使用 iso-8859-1,所以 jdbc driver 把查询字符串传给 mysql server 时,会做 unicode->iso-8859-1 的转换,从 mysql server 接受结果时,会做 iso-8859-1->unicode 的转换。
这样就有问题了,在命令行下插入数据库的中文字符串是 GBK ,所以 jdbc driver 接受查询结果时,应该做 GBK->unicode 的转换才对。   
验证一下,对从数据库中读出的中文字串 data

new String(data.getByte("iso-8xxx"), "gbk" ) 

将 data 先做一个 unicode->iso-8xxx 转换成它存放在数据库中的原始模样。我们知道它是 gbk ,所以手工来 gbk->unicode ,这样 java 程序就显式正常了。   
类似,写入数据库的时候,我们期待 jdbc driver 会把 unicode->gbk ,结果却是 unicode->iso-8859-1 ,当然是乱码了。   
知道了乱码产生的原理,那如何解决这个问题呢?   
想一想,写 mysql jdbc driver 的家伙会连转码都不知道?    
其实jdbc driver里提供了解决方案,就是在jdbc url中加一个参数:characterEncoding=GBK,告诉 jdbc driver 强制按指定参数转码 即可。  

另外,其实jdbc driver的源代码里是有自动探测数据库的字符集的,从而做相应的转换的。如果判读数据库使用的是单字节,则调用自己的转换函数(自称效率远大于jvm自带的方法)。但这段代码后面在探测到目标数据库为多字节编码时忘了去使用jvm自带的转换方法,从而继续使用缺省的iso-8859-1的转换。这样就造成了乱码现象。如果想彻底解决这个问题,可以修改jdbc driver相应地方的代码即可。

分享到:
评论

相关推荐

    如何解决MYSQL数据库中文乱码问题-.docx

    解决MYSQL数据库中文乱码问题 在实际的开发和应用中,MYSQL数据库中文乱码问题是一个常见的问题,这个问题的出现往往是由于数据库字符集的不正确设置所引起的。解决MYSQL数据库中文乱码问题需要从多方面入手,包括...

    jdbc连接数据库的乱码问题(已解决)

    jdbc连接mysql出现了乱码,总结起来就是里面的四个编码方式是一样的时候,就不会乱码了,简之,客户连接数据库返回结果(编码必须一致)。

    MySQL + JDBC彻底解决中文乱码问题

    ### MySQL + JDBC 彻底解决中文乱码问题 #### 一、引言 在使用 MySQL 数据库进行数据存储时,可能会遇到中文字符显示为乱码的问题。这种情况通常出现在数据库连接参数配置不当或数据库本身的字符集设置不正确时。...

    MySQL数据库—乱码总结

    ### MySQL数据库乱码问题解析与解决方案 #### 一、引言 在使用MySQL数据库的过程中,字符集设置不当可能会导致数据存储或查询时出现乱码问题。本文将针对MySQL数据库中的乱码现象进行深入分析,并提供相应的解决...

    乱码问题解决 完全解决MYSQL数据库的乱码问题.docx

    本文主要探讨了如何完全解决MySQL数据库的乱码问题,以及在Web应用的不同层面设置正确的字符编码。 首先,对于Web应用中的中文问题,我们需要确保每个环节的编码一致。在JSP页面中,应使用`...

    乱码问题解决 完全解决MYSQL数据库的乱码问题.pdf

    总的来说,解决MySQL数据库乱码问题的关键在于确保整个数据处理链路中,从Web应用到数据库,再到开发工具,所有环节的编码设置保持一致,尤其是与UTF-8兼容。通过上述方法,可以有效地防止和解决乱码问题,确保中文...

    解决连接mysql中文显示乱码

    这主要涉及到字符编码的兼容性和设置问题,尤其是在使用MySQL数据库与不同编程语言(如Java、JSP)进行交互时更为突出。以下是对如何解决连接MySQL时中文显示乱码问题的详细解析。 ### 解决中文显示乱码的关键知识...

    mysql与JDBC中文问题的解决方法

    MySQL与JDBC在处理中文字符时可能会遇到一些问题,主要是由于编码设置不一致...通过调整JDBC连接URL参数或者修改MySQL服务器配置,可以有效地避免中文乱码问题。同时,选择兼容性好且更新的驱动版本也是至关重要的。

    hibernate数据库中文乱码问题

    在使用Hibernate框架进行数据库操作时,可能会遇到中文乱码的问题。特别是在使用MySQL作为数据库,并且已将数据库编码设置为`utf-8`的情况下,依然出现乱码现象。这不仅影响数据的正确性,也降低了系统的可用性。 #...

    使用JDBC连接Mysql数据库会出现的问题总结

    在使用Java JDBC连接MySQL数据库时,开发者可能会遇到各种问题,这些问题通常涉及到驱动兼容性、配置错误、编码问题等。以下是一些常见的问题及其解决方案: 1. **驱动类加载的弃用**: 在较新的MySQL版本(如...

    mysql数据库乱码问题.pdf

    以下是一些关于如何解决MySQL数据库乱码问题的关键知识点: 1. **安装时的字符集选择**: - MySQL在安装时会要求设置默认的字符集。如果这个字符集与你的应用程序(如JSP页面)使用的编码不同,可能会引起乱码。 ...

    解决Mysql数据库在web开发中乱码问题

    在Web开发中,尤其是使用MySQL数据库进行数据存储时,字符编码问题经常会导致中文或特殊字符显示为乱码,严重影响用户体验和数据的准确性。本文将详细探讨如何解决MySQL数据库在Web开发中的乱码问题,确保数据在各个...

    Mysql插入中文乱码问题解决

    在使用 MySQL 数据库处理中文数据时,经常会遇到一个让人头疼的问题——中文乱码。中文乱码不仅影响用户体验,还可能导致数据丢失或者错误,因此解决这个问题至关重要。 **出现乱码的原因** 多数情况下是由于 MySQL...

    MySQL数据库中乱码成因及解决办法探究.pdf

    MySQL数据库中乱码的问题是许多开发者在处理中文数据时经常遇到的挑战。乱码主要由字符集配置不当引起,这涉及到MySQL支持的多种字符集和校对规则。MySQL支持的字符集包括GBK、UTF-8、UTF-16等,用于表示不同语言的...

    解决数据库存取乱码问题

    在IT领域,数据库存取乱码问题是一个常见的挑战,尤其对于多语言支持或者涉及中文字符的应用来说。这个问题可能出现在多种场景下,如数据输入、查询显示或者导出时。为了解决这一问题,我们需要深入理解字符编码原理...

    Openfire在使用MySQL数据库后的中文乱码问题解决.docx

    在使用 MySQL 作为数据存储时,Openfire 用户经常遇到一个常见的问题,那就是中文字符显示为乱码。这个问题主要体现在以下几个方面: 1. 当用户通过 Openfire 客户端或后台管理系统创建包含中文属性的新账户时,...

Global site tag (gtag.js) - Google Analytics