java从MySQL中读取blob类型中文乱码问题,答的好加分
java通过JDBC读取BLOB类型的数据(是一些中文字符)但是读取时不能完全显示所有中文,中文中不能显示都是?号
我用的哦mysql是版本 5.0.27 字符集设置是GBK 但是存储参数查看时我看了是UTF-8的字符集,直接从MYSQL中读取数据时为html格式是中文 能够完全显示:
这是数据库直接导出的结果:
<p><font face="Arial"> 这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告</font></font></font></font></font></p> <p><font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告</font></font></font></font></p> <p><font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告</font></font></font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告</font></font></p> <p><font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告</font></font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告</font></font></font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告</font></p> <p><font face="Arial">这是一个很长很长的公告<font face="Arial">这是一个很长很长的公告</font></font></p>
但是用JDBC从数据库里读出的是:
<p><font face="Arial"> 这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??/font></font></font></font></font></p>
<p><font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??/font></font></font></font></p>
<p><font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??/font></font></font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??/font></font></p>
<p><font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??/font></font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??/font></font></font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??/font></p>
<p><font face="Arial">这是????很长很长的公??font face="Arial">这是????很长很长的公??/font></font></p>
我用的数据库驱动是:mysql-connector-java-5.0.6-bin.jar
在读取我把数据进行转化:
String sBlob = "";
InputStream in = this.rs.getBinaryStream(colName);
byte[] buffer = new byte[1024];
int len = 0;
while ( (len = in.read(buffer)) != -1)
{
sBlob += new String(buffer, 0, len);
}
in.close();
System.out.println("SQL****:"+new String(sBlob.getBytes("GBK"),"UTF-8"));
return new String(sBlob.trim().getBytes("GBK"),"UTF-8");
如果不转化基本是乱码
[解决办法]
命令行下登入mysql 输入\s
注意到有如下内容:
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
MySQL数据库默认的字符集是latin1,是瑞典的文字字符集,难怪有中文乱码的问题
解决方式
步骤1:
在my.ini中[mysql]后追加内容
default-character-set= gbk
完成后 中文乱码的问题依然存在
命令行下登入mysql 输入\s再看一下
注意到如下内容
Server characterset: latin1
Db characterset: latin1
Client characterset: gbk
Conn characterset: gbk
发现
Client characterset、Conn. Characterset已经由latin1改变为gbk
但是Server characterset、Db characterset依然是latin1
这个显然就是乱码产生的原因
继续
步骤2:
在my.ini中[mysqld]后追加内容
default-character-set= gbk
命令行下登入mysql 输入\s再看一下
注意到
Server characterset: gbk
Db characterset: gbk
Client characterset: gbk
Conn characterset: gbk
全部都为gbk编码了
但还是会出现乱码,这就是我们在建立表的时候,它默认的字符也可能是latin1,如果是latin1的话,
或者不是gbk的话,都有可能是出现字符乱码的,所以,在我们建立好一个表之后,我们应该要进行转换一下表的字符。
命令为
Alter TABLE [表名] CONVERT TO CHARACTER SET GBK;
这样子就不会出现乱码这个问题了。
[解决办法]
你现在先看一下,这样子可不可以帮你解决这个问题。
还有,你为什么不用mediumtext这个类型而用BLOB类型
blob类型是用于存储文件,以二进制方法存储。