在Java中插入数据到mysql时遇到了部分中文乱码的问题,也是就是大部分中文插入mysql式没有问题的,我的mysql数据库编码为Latin1(iso-8859-1),取出的数据编码为gbk,如果数据不经过数据库,先转为iso-8859-1,然后再转回gbk,数据能够正常显示                        String s=new String("邓啟中".getBytes("gbk"),"iso-8859-1");

String s2=new String(s.getBytes("iso-8859-1"),"gbk");
System.out.println(s);
System.out.println(s2);打印出:
??????
邓啟中说明数据可以转换回来,可是当把数据插入数据库时,数据库显示的是乱码,页面显示的也是乱码package com.midland.sql;import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class Test { /**
 * @param args
 * @throws SQLException 
 * @throws UnsupportedEncodingException 
 */
public static void main(String[] args) throws SQLException, UnsupportedEncodingException {
try {
Class.forName("com.mysql.jdbc.Driver"); 
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/imrms?user=a&password=b");
String s=new String("邓啟中".getBytes("gbk"),"iso-8859-1");
// String s="中心";
//邓啟文中心
String s2=new String(s.getBytes("iso-8859-1"),"gbk");
System.out.println(s);
System.out.println(s2);

String sql="update  imrms_xbuildings set name='"+s+"' where id=9;";
//sql= new String(sql.getBytes("gb18030"),"iso-8859-1");
java.sql.PreparedStatement ps=connection.prepareStatement(sql);
//ps.setString(1, s);
ps.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} }}数据库中name字段显示的数据是:邓?⒅
如果name字段插入的值为:“数据是”等常见汉字,则显示正常。这个问题困恼了很久,请高手赐教!!!!!!!

解决方案 »

  1.   

    字符集的问题,可以参考下贴。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   

    ouyjf_2008 (ouyjf_2008)
      '截至2010-04-13 11:31:07  用户结帖率0.00% 当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  3.   

    我的显示页面是sp,请问怎么解决呢??可以肯定是在插入数据到mysql数据库的过程中的转码问题。
      

  4.   

    现在的问题是,数据库的编码不能更改,只能使用Latin1,utf-8是没有问题的,就是使用Latin1有问题。
      

  5.   

    客户端连接完以后,先执行set names 'latin1'
    然后中文直接插入和取出。即保持数据库和客户端连接 都是latin1字符集。
      

  6.   

    我执行
    SHOW VARIABLES LIKE 'character_set_%';
    后结果如下:character_set_client latin1
    character_set_connection latin1
    character_set_database gbk
    character_set_filesystem binary
    character_set_results latin1
    character_set_server latin1
    character_set_system utf8set names 'latin1';是设置character_set_client,character_set_connection,character_set_results
    的值为Latin1吧!现在数据库中存在一个“邓啟中”值,查询出来后页面显示的值为:邓?⒅?
    我在后台使用str = new String(str.getBytes("ISO-8859-1"), "GBK");转码,前台页面使用utf-8编码
    所以现在执行了
    set names 'latin1';还是没有解决问题。
      

  7.   

     http://www.javaeye.com/topic/223304
    这是javaeye的一篇参考文章,但是作者没有写实现的代码,哪位高手能够帮忙修改啊??本人感激不尽!
      

  8.   

    你这里明显创建的数据库的字符集是gbk啊,所以,连接获取以后,执行sql: set names 'gbk'
    然后什么都不用转就可以了。
    你再试试。
      

  9.   

    太奇怪了!把 jdbc驱动包换成mysql-connector-java-3.1.7竟然乱码就没了!!!