以前没搞过mysql数据库,昨天拿到一个mysql数据库,发现表字段都是中文名。例如:ID,中文题名,英文题名。
    然后在HeidiSQL中,执行SQL语句:select * from re where 中文题名='虚拟组织的学习活动与知识管理战略',能查出值。
    我在程序中,组装了这么一条语句:String sql = "select * from re where 中文题名='" + name + "'";,再执行的时候,就报错了,说是'???'='???????????????''。
    这是为什么呀?我把表字段换成英文就好了。
    在ps=conn.prepareStatement(sql);中发生了什么事情。
    conn = ConnMySql.getConnection();
    String sql = "select * from re where 中文题名='" + name + "'";
    System.out.println(sql);
    ps = conn.prepareStatement(sql);
    rs = ps.executeQuery();
    望大神详解。

解决方案 »

  1.   

    能不能先把错误贴出来看看?
     是不是编码的问题,有没有处理编码问题?
    这个我经常用,没出什么问题紫装的时候确定组装没问题  System.out.println(sql); 
    打印出来有没有问题,,我的意思是打印出来再把sql语句放到数据库去执行一下,判断是不是sql语句本身问题,还是你执行sql的问题
      

  2.   

    还有你的中文字段有没有转译啊
     建议1.把错误贴出来
         2.把组装好的sql语句打印出来,然后复制到mysql里去执行一下,看看sql执行是否会异常
         3.在去debug一下代码从连接数据库开始,调试一下。看看代码哪里异常,可以多些几个try捕获异常
      

  3.   

    很明显是编码问题的
    show variables like 'character_set_%';
    看下数据库的编码。
      

  4.   

    数据库有中文字段证明安装的时候就已经选好了gbk编码,所以就是你的代码问题了,编码环境也要是gbk
      

  5.   

    Properties p = new Properties ();
    p.setProperty("charSet","GBK");// 这个忘了是charSet 还是setChar,后面的编码根据数据的编码是什么就改成什么吧
    p.setProperty("user","");
    p.setProperty("password","");试试用Properties 作为参数的方式创建connection,这样可以指定连接的编码
      

  6.   

    在与数据库连接的字符串有没有带编码呢?
    mysql的url后边可以带上编码的?user_encoding=utf-8之类的吧