mysql5.0+mysql-connector-java-3.1.12+jdk1.5.0
数据库编码为utf8import java.sql.*;
public class mysql{
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test?user=root&password=qazwsx");
PreparedStatement ps=cn.prepareStatement("insert t values(?)");
ps.setString(1,"中文工团");
ps.executeUpdate();
ps.close();
Statement st=cn.createStatement();
ResultSet rs=st.executeQuery("select * from t");
rs.first();
while(rs.next())
System.out.println(rs.getString(1));
rs.close();
st.close();
cn.close();}catch(Exception e){e.printStackTrace();}
System.out.println("ok");
}
}
用以上代码,可得到正确的结果.
-----------------
C:\xx>java mysql
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
中文工团
ok
-----------------------
但在mysql中确看到了乱码,怎么解决?mysql> select * from t ;
+--------------+
| col          |
+--------------+
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
| 涓枃宸ュ洟     |
+--------------+
10 rows in set (0.00 sec)

解决方案 »

  1.   

    public String getstring(String s)
    {
    if(s==null){
    s="";
    }
    try
    {
    byte[] b=s.getBytes("ISO-8859-1");
    s=new String(b);}
    catch(Exception e)
    {
    s="";
    }
    return s;
    }
    然后加上这个方法了.
    while(rs.next())
    {
    String ss=rs.getString(1);
    out.print(ss);
    }
      

  2.   

    存入数据库使用:
    byte[] b=s.getBytes("GBK");
    s=new String(b,"ISO-8859-1");
    这里的s存到数据库就不是乱码从数据库中取出使用
    String s=rs.getString(1);
    byte[] b=s.getBytes(,"ISO-8859-1");
    s=new String(b,"GBK");
    这里的s从数据库里取出正常的中文,就不是乱码
      

  3.   

    要修改你的MYSQL数据库的默认编码http://www.bloghome.cn/index.php?op=ViewArticle&articleId=204&blogId=5 设置mysql数据库的编码 
    linuxman | 2004年12月24日, 19:26 1 在my.cf文件的[mysqld]段设置: 
    default-character-set=utf8 2 单独设置某个数据库: 
    alter database testdb character set utf8; 查看mysql支持的编码: 
    show character set; 解决PHP存取MySQL 4.1乱码问题 
    linuxcrazy | 2005年01月18日, 15:05 解决PHP存取MySQL 4.1乱码问题 
    从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过我在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。我读了一下新的MySQL在线手册中第十章"Character Set Support"后终于找到了解决方法并测试通过。 MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。 查看系统的字符集和排序方式的设定可以通过下面的两条命令: mysql> SHOW VARIABLES LIKE 'character_set_%'; 
    +--------------------------+----------------------------+ 
    | Variable_name | Value | 
    +--------------------------+----------------------------+ 
    | character_set_client | latin1 | 
    | character_set_connection | latin1 | 
    | character_set_database | latin1 | 
    | character_set_results | latin1 | 
    | character_set_server | latin1 | 
    | character_set_system | utf8 | 
    | character_sets_dir | /usr/share/mysql/charsets/ | 
    +--------------------------+----------------------------+ 
    7 rows in set (0.00 sec) mysql> SHOW VARIABLES LIKE 'collation_%'; 
    +----------------------+-------------------+ 
    | Variable_name | Value | 
    +----------------------+-------------------+ 
    | collation_connection | latin1_swedish_ci | 
    | collation_database | latin1_swedish_ci | 
    | collation_server | latin1_swedish_ci | 
    +----------------------+-------------------+ 
    3 rows in set (0.00 sec) 上面列出的值就是系统的默认值。(很奇怪系统怎么默认是latin1的瑞典语排序方式)... 当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句: SET NAMES 'utf8'; 它相当于下面的三句指令: 
    SET character_set_client = utf8; 
    SET character_set_results = utf8; 
    SET character_set_connection = utf8; 再试试看,正常了吧?^_^ Enjoy!