以前都有没有什么用过MYSQL数据库,近日在用JDBC连接MYSQL数据库,遇到一个让人头痛的问题,就是JDBC读取数据库里的中文数据时,老是乱码,从网上找来各种样的方法,都无法搞定,真是郁闷!最后得一大虾在提醒,恍然大悟……
我的测试环境及工具:JDK1.60下,MYSQL 5.024A 开发工具:eclipse3.01
请看本人的源码:
在MYSQL的数据库dedemo的一个表student存着一个学生的学号和姓名
public class JdbcDemo{
public static void main(String[] args){
try{
String str,sql;
Connection conn;
Statement stmt;
ResustSet rs;
str = "com.mysql.jdbc.Driver";
Class.forName(str);
conn = DriverManager.getConnection("jdbc:mysql://localhost/dbdemo?user=root&pwssword=12345");
stmt = conn.createStatement();
sql = "select * from student";
rs = stmt.executeQuery(sql);
while(rs.next()){
String num = rs.getString(1);
String name = rs.getString(2);
System.out.println("Num:"+num);
System.out.println("Name:"+name);
}
rs.close();
stmt.close();
conn.close();
}catch(Execption e){
e.printStackTrace();
}
}
}
程序运行的结果:
Num:123456
Name: ?????÷
于是我将:conn = DriverManager.getConnection("jdbc:mysql://localhost/dbdemo?user=root&pwssword=12345");改成:conn = DriverManager.getConnection("jdbc:mysql://localhost/dbdemo?user=root&pwssword=12345&useUnicode=true&characterEncoding=gb2312")及 conn = DriverManager.getConnection("jdbc:mysql://localhost/dbdemo?user=root&pwssword=12345&useUnicode=true&characterEncoding=ISO-8859-1")两种方式,运行的结果都同原来一样,还是无法显示正常中文数据。
后来我又将:String Name = rs.getString(2);改成:
String Name = new String(rs.getString(2).getBytes("gb2312"));
其所得结果还是没有解决问题,
最后将其改成:
String Name = new String(rs.getString(2).getBytes("ISO-8859-1"));
问题就解决了!
最后我到网上去查了一上GB2312和ISO-8859-1,得到以下资料,特粘来和大家分享:
“GB2312的原文”是指国家1980年的一个标准《中华人民共和国国家标准信息交换用汉字编码字符集基本集 GB 2312-80》。这个标准用两个数来编码汉字和中文符号。第一个数称为“区”,第二个数称为“位”。所以也称为区位码。1-9区是中文符号,16-55区是一级汉字,56-87区是二级汉字。现在Windows也还有区位输入法,例如输入1601得到“啊”。
内码是指操作系统内部的字符编码。早期操作系统的内码是与语言相关的.现在的Windows在内部统一使用Unicode,然后用代码页适应各种语言,“内码”的概念就比较模糊了。微软一般将缺省代码页指定的编码说成是内码,在特殊的场合也会说自己的内码是Unicode,例如在GB18030问题的处理上。
所谓代码页(code page)就是针对一种语言文字的字符编码。例如GBK的code page是CP936,BIG5的code page是CP950,GB2312的code page是CP20936。
Windows中有缺省代码页的概念,即缺省用什么编码来解释字符。例如Windows的记事本打开了一个文本文件,里面的内容是字节流:BA、BA、D7、D6。Windows应该去怎么解释它呢?
是按照Unicode编码解释、还是按照GBK解释、还是按照BIG5解释,还是按照ISO8859-1去解释?如果按GBK去解释,就会得到“汉字”两个字。按照其它编码解释,可能找不到对应的字符,也可能找到错误的字符。所谓“错误”是指与文本作者的本意不符,这时就产生了乱码。
答案是Windows按照当前的缺省代码页去解释文本文件里的字节流。缺省代码页可以通过控制面板的区域选项设置。记事本的另存为中有一项ANSI,其实就是按照缺省代码页的编码方法保存。
Windows的内码是Unicode,它在技术上可以同时支持多个代码页。只要文件能说明自己使用什么编码,用户又安装了对应的代码页,Windows就能正确显示,例如在HTML文件中就可以指定charset。
有的HTML文件作者,特别是英文作者,认为世界上所有人都使用英文,在文件中不指定charset。如果他使用了0x80-0xff之间的字符,中文Windows又按照缺省的GBK去解释,就会出现乱码。这时只要在这个html文件中加上指定charset的语句,例如:
如果原作者使用的代码页和ISO8859-1兼容,就不会出现乱码了。
本人只是一个新人,还望各位指导一二……
分享到:
相关推荐
在处理数据库返回的数据时,还需要确保应用程序内部处理字符串时使用的字符集与数据库一致,避免因编码不匹配导致的乱码问题。这通常涉及数据库连接、数据读取、数据展示等多个环节的编码设置。 ### 实际操作步骤 ...
JDBC连接mysql处理中文时乱码解决办法详解 近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb...
- **写入数据**:在写入数据时,若直接使用JSP页面的中文字符串,可能会因为编码转换不当导致乱码。此时,需要在写入前对字符串进行转码,例如将GBK编码的字符串`s1`转换为ISO-8859-1编码:`String s2 = new String...
在Web开发中,尤其是使用MySQL数据库进行数据存储时,字符编码问题经常会导致中文或特殊字符显示为乱码,严重影响用户体验和数据的准确性。本文将详细探讨如何解决MySQL数据库在Web开发中的乱码问题,确保数据在各个...
在开发Web应用时,尤其是使用Java技术栈如JSP、Servlet与MySQL数据库交互时,中文乱码问题常常困扰着开发者。这个问题的出现主要是由于字符编码不一致导致的,包括数据库编码、连接编码、页面编码等多个环节。下面...
### MySQL中文乱码问题解决方案 在使用MySQL的过程中,中文乱码问题是常见的问题之一,尤其是在数据库初始设置不当时,更容易出现此类问题。本文将详细介绍如何彻底解决MySQL中的中文乱码问题。 #### 一、理解中文...
### MySQL乱码问题解决方案 #### 一、理解MySQL字符集设置的重要性 在处理数据库操作时,字符集(Character Set)的正确配置对于确保数据的准确读取与存储至关重要。特别是对于包含多语言文本的应用场景,如中文、...
### Linux MySQL中文乱码问题解决 #### 背景与问题描述 在使用Linux系统部署MySQL数据库时,可能会遇到中文字符显示为乱码的问题。这一现象通常发生在对含有中文字符的数据进行读取或写入操作时。中文乱码不仅影响...
本篇文章详细介绍了如何使用MySQL Migration Toolkit解决从MS SQL Server向MySQL迁移数据时出现的乱码问题。通过正确配置源数据库和目标数据库的字符集,可以确保数据迁移过程中的字符完整性。希望本文能帮助你在...
在使用MySQL数据库的过程中,字符集设置不当可能会导致数据存储或查询时出现乱码问题。本文将针对MySQL数据库中的乱码现象进行深入分析,并提供相应的解决策略。 #### 二、MySQL数据库乱码概述 MySQL数据库中的...
4. 检查代码中的编码处理:确保在读取和写入数据时,所有涉及字符串的处理都考虑了正确的编码。例如,使用InputStreamReader和OutputStreamWriter进行输入输出流的编码转换。 通过以上步骤,应该能解决JDBC查询返回...
当不同的系统或应用之间传输数据时,如果源端和目标端使用的字符集不同,就会导致乱码。具体来说,在MySQL中,以下几个环节可能会引起乱码: 1. **客户端与服务器之间的字符集不匹配**:客户端发送的数据使用一种...
在MySQL中,若采用默认配置,则会在创建数据库或数据表时使用latin1字符集(ISO 8859-1西欧字符集),而该字符集并不支持中文编码,因此在尝试存储中文数据时便会产生乱码。 #### 一、理解字符集冲突的原因 MySQL...
综上所述,解决hibernate+mysql环境下中文存入数据库乱码的问题,需要从Web应用配置、数据库配置、框架配置以及文件编码等多个方面综合考虑,确保整个数据处理链路的字符集一致且支持UTF-8。只有这样,才能确保中文...
3. **插入数据**:当插入中文数据时,如果数据库和表的字符集设置正确,一般不会出现乱码。在示例中,"测试 MySQL 中文显示" 被成功插入到`messages`表中,并能正常显示。 4. **Java程序连接**:Java程序通过JDBC...