我的java工程是gb2312的
数据库是mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec) 但是我直接执行
rs = stmt.executeQuery(str);就能成功把中文插入到数据库。之前不能 今早把mysql重装以后 设置默认编码为utf8才突然成功的之前的语句为 public ResultSet executeQUERY(String str){

try {
// String setCharset = "SET NAMES 'gb2312'";
// stmt.executeUpdate(setCharset);

//String setCharset = "SET NAMES 'utf8'";
//stmt.executeUpdate(setCharset);

//String sql;

//sql = new String(str.getBytes(),"ISO-8859-1");//iso-8859-1

rs = stmt.executeQuery(str);

} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("查询数据库出现异常!1");
e.printStackTrace();
}

解决方案 »

  1.   

    什么问题,你的字符集都是UTF8
      

  2.   

    java工程推荐使用utf8. 这样就不用再修改了
      

  3.   

    程序是师兄写的 已经是gb2312的了 所以我想用String setCharset="SET NAMES 'gb2312'";
    stmt.executeUpdate(setCharset);
    sql = new String(str.getBytes("gb2312"),"utf8");
    rs = stmt.executeQuery(str);
    把它改了 可结果出现乱码。
    我要是不抓吗直接执行就不会出现。整的我有点不明白了。
      

  4.   

    前提是你的JAVA程序中本身使用的是UTF码。 SET NAMES 本身是告诉MYSQL你的客户端是用什么编码。 而你的程序使用的默认编码需要查看操作系统和开发工具。
      

  5.   

    你可以将数据的字节编码该为该为gb2312呀 set names gb2312