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")

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

Mysql中文乱码问题完美解决方案

原文:http://www.2cto.com/database/201108/101151.html MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在lat...
  • luoweifu
  • luoweifu
  • 2013年04月21日 22:51
  • 173988

MySQL 命令行查询乱码 编码问题

MySQL 命令行查询乱码 编码问题 当使用数据库工具查询数据时显示数据正常,中文也很正常,利用命令查询时,中文显示乱码,如下图: 然后查看数据库状态: 发现客户端Client及连接Co...

彻底解决mysql中文乱码

mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。...

使用mysql命令窗口查看中文数据乱码的解决办法

在MySQL的dos客户端输出窗口中查询表中的数据时,表中的中文数据都显示成乱码,如下图所示:   上网查了一下原因:之所以会显示乱码,就是因为MySQL客户端输出窗口显示中文时使用的字...

解决JDBC中文乱码问题

由于编码字符集的不同通常容易导致中文乱码问题,根据以下做法一步一步设置将可解决中文乱码问题。对于从数据库提取中文或者向数据库录入中文均可实现。本文使用Navicate管理数据库,eclipse管理编写...

被折腾了一下午的java查询mysql数据库的中文乱码问题

java 通过connector 访问 mysql, 可是里面返回的中文字符是乱码 排除一:  mysql 里面直接查询出来的字符是中文的 排除二: connector的设置  jdbc:mysq...

SELECT的结果中出现"乱码"的解决方案--【叶子】

--测试数据 declare @table table (colname varchar(8)) insert into @table select '微•博' union all selec...

MYSQL中HEX、UNHEX函数

1、 首先在Xshell下查看本次实验mysql版本 2、 然后连接到Mysql服务器上   3、 首先我们对UNHEX函数进行测试 HEX函数:将十进制数转化为十六进制数 UNHEX函数:将十六...

mysql hex与unhex 函数的妙用

hex:可以用HEX()函数将一个字符串或数字转换为十六进制格式的字符串    unhex:把十六进制格式的字符串转化为原来的格式    如:  mysql> select hex('abc');...

主线程不允许联网处理,使用handle失败,API23,AS2.1

主线程不允许联网处理,使用handle失败,API23,AS2.1盖天地不全,这经原是全全的,今沾破了, 乃是应不全之奥妙也,岂人力 所能与耶! 愿来者补充 新android.os.NetworkOn...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDBC从mysql查询中文乱码问题
举报原因:
原因补充:

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