`
javatim
  • 浏览: 69971 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解决JDBC读取MYSQL中文数据时出现乱码的心得…

    博客分类:
  • JAVA
阅读更多
以前都有没有什么用过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兼容,就不会出现乱码了。


本人只是一个新人,还望各位指导一二……
分享到:
评论

相关推荐

    解决连接mysql中文显示乱码

    在处理数据库返回的数据时,还需要确保应用程序内部处理字符串时使用的字符集与数据库一致,避免因编码不匹配导致的乱码问题。这通常涉及数据库连接、数据读取、数据展示等多个环节的编码设置。 ### 实际操作步骤 ...

    JDBC连接mysql处理中文时乱码解决办法详解

    JDBC连接mysql处理中文时乱码解决办法详解 近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb...

    JSP与MySQL交互的中文乱码解决方案

    - **写入数据**:在写入数据时,若直接使用JSP页面的中文字符串,可能会因为编码转换不当导致乱码。此时,需要在写入前对字符串进行转码,例如将GBK编码的字符串`s1`转换为ISO-8859-1编码:`String s2 = new String...

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

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

    如何解决MySql-JSP中文乱码问题

    在开发Web应用时,尤其是使用Java技术栈如JSP、Servlet与MySQL数据库交互时,中文乱码问题常常困扰着开发者。这个问题的出现主要是由于字符编码不一致导致的,包括数据库编码、连接编码、页面编码等多个环节。下面...

    MySQL中文乱码问题解决方案

    ### MySQL中文乱码问题解决方案 在使用MySQL的过程中,中文乱码问题是常见的问题之一,尤其是在数据库初始设置不当时,更容易出现此类问题。本文将详细介绍如何彻底解决MySQL中的中文乱码问题。 #### 一、理解中文...

    乱码解决_MYSQL.txt

    ### MySQL乱码问题解决方案 #### 一、理解MySQL字符集设置的重要性 在处理数据库操作时,字符集(Character Set)的正确配置对于确保数据的准确读取与存储至关重要。特别是对于包含多语言文本的应用场景,如中文、...

    linux mysql中文乱码问题解决

    ### Linux MySQL中文乱码问题解决 #### 背景与问题描述 在使用Linux系统部署MySQL数据库时,可能会遇到中文字符显示为乱码的问题。这一现象通常发生在对含有中文字符的数据进行读取或写入操作时。中文乱码不仅影响...

    解决MySQL Migration Toolkit导入乱码

    本篇文章详细介绍了如何使用MySQL Migration Toolkit解决从MS SQL Server向MySQL迁移数据时出现的乱码问题。通过正确配置源数据库和目标数据库的字符集,可以确保数据迁移过程中的字符完整性。希望本文能帮助你在...

    MySQL数据库—乱码总结

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

    JDBC查询返回数据集一直为空,明明数据库(MySQL)有数据的解决办法

    4. 检查代码中的编码处理:确保在读取和写入数据时,所有涉及字符串的处理都考虑了正确的编码。例如,使用InputStreamReader和OutputStreamWriter进行输入输出流的编码转换。 通过以上步骤,应该能解决JDBC查询返回...

    mysql插入记录防止乱码

    当不同的系统或应用之间传输数据时,如果源端和目标端使用的字符集不同,就会导致乱码。具体来说,在MySQL中,以下几个环节可能会引起乱码: 1. **客户端与服务器之间的字符集不匹配**:客户端发送的数据使用一种...

    MySql5中文乱码的解决方法

    在MySQL中,若采用默认配置,则会在创建数据库或数据表时使用latin1字符集(ISO 8859-1西欧字符集),而该字符集并不支持中文编码,因此在尝试存储中文数据时便会产生乱码。 #### 一、理解字符集冲突的原因 MySQL...

    hibernate+mysql 中文存入数据库乱码解决方法

    综上所述,解决hibernate+mysql环境下中文存入数据库乱码的问题,需要从Web应用配置、数据库配置、框架配置以及文件编码等多个方面综合考虑,确保整个数据处理链路的字符集一致且支持UTF-8。只有这样,才能确保中文...

    Java连接过程中的MySQL中文乱码问题[整理].pdf

    3. **插入数据**:当插入中文数据时,如果数据库和表的字符集设置正确,一般不会出现乱码。在示例中,"测试 MySQL 中文显示" 被成功插入到`messages`表中,并能正常显示。 4. **Java程序连接**:Java程序通过JDBC...

Global site tag (gtag.js) - Google Analytics