JDBC从mysql查询中文乱码问题

原创 2013年12月03日 13:54:31

    之前需要使用JAVA写一个导出的软件,由用户提供数据库,我这边来解析导出成XML文件,数据库中的编码使用的默认的latin1,数据库中的中文已经是乱码了,使用mysql客户端查询时,通过:

set names latin1

可以正常查询出中文。

    但是,在使用JDBC查询出来的结果集,却总是乱码,尝试过各种方法,比如characterEncoding参数等等。但是一直是乱码。在JAVA端使用ISO8859_1解码也无法正常显示出中文,后来经朋友帮忙,在MYSQL官网查询到原来在JAVA中与latin1对应的编码应该是Cp1252,使用Cp1252解码终于可以显示中文了。


    之后在查询过程中,又出现问题,还是有一部分中文显示乱码。无法正常显示。编码应该是没有问题了,但是为什么还是显示乱码呢? 又在网上查了很久的资料,才找到问题:

MYSQL编码问题

原来Mysql 的latin1 不等于标准的latin1(iso-8859-1) 和cp1252,比iso-8859-1多了0x80-0x9f字符,比cp1252多了0x81,0x8d,0x8f,0x90,0x9d 一共5个字符


目前找到两种适合自己的解决方式:

一、通过MYSQL函数进行转换,在MYSQL服务端就转成所需要的UTF-8编码再发送。可以使用:

SELECT convert(unhex(hex(convert(columnName using latin1))) using utf8) as name from table

这样取出来的中文就不会乱码了。


二、通过JDBC结果集的getBytes方法来拿到原始字节码,再通过UTF-8来建立新字符串即可获得正常的中文。


还有一种方式是通过JAVA代码来进行转换,但是由于Cp1252和标准的差异,在对数据进行以下操作后:

new String(getBytes("Cp1252"),"UTF-8")

有部分中文是无法正常显示的。如果哪位有好的方法可以提供一下。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java jdbc 链接mysql插入数据中文显示乱码

java jdbc 链接mysql插入数据中文显示乱码,自己在解决过程中的解决方案,以及自己遇到的一些问题,之前一直记再云笔记上,和大家分享出来。

jdbc 连接 mysql 时的中文乱码问题

在用 jdbc 向 mysql 数据库插入中文时出现了乱码,严格来说是通过 Hibernate。记录下搜索和查文档以后找到的解决办法。 首先要告诉数据库要插入的字符串使用的字符集,mysql 默...

开源电商 OFBiz (Mysql)Idea安装过程及问题(中文乱码,500 GenericEntityException jdbc,Visitor错误处理)

开源电商 OFBiz (Mysql)安装过程及问题OFBiz是一个非常著名的电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级、跨平台、跨数据库...

中文乱码--MySQL5.0中文问题及JDBC数据库连接和JSP汉字编码问题解决方法总

MySQL5.0中文问题解决方案如下:    1、在dos环境下,用mysql --default-character-set=gbk -hlocalhost-u root -p 这句话进入mysql...

Java使用PreparedStatement查询MySql中文乱码问题

MySql中出现中文乱码问题可以从两个方面进行考虑:1)MySql的使用的字符集不支持中文;2)Java客户端设置datasource 的driver 时没有指定字符集编码; 1、MySql的使用的...

MYSQL命令行查询中文乱码问题解决方案

会出现中文乱码的原因可能有以下几点原因: (1)server问题 (2)table语系问题 (3)客户端问题 解决方案: (1)找到安装mysql时的目录下my.ini文件,用记事本将其打开...

编程查询mysql中文乱码问题

众所周知,utf8兼容中文是最好的,因为这种编码中,一个汉字占用3个字节(zu)

以中文为查询条件查询mysql数据库时有数据却查不到数据或者中文乱码的问题

中文乱码或者有数据查不到数据这类问题,多数是因为编码不一致导致。 WEB开发中:MYSQL编码主要会出现在五个地方:         1、 mysql安装的默认编码(latin1)-在mysql.in...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)