Create DATABASE IF NOT EXISTS aaa default charset utf8 COLLATE utf8_general_ci;
用这个建好的数据库,使用语句查询,    TQuery* qUserRole=new TQuery(this);
    qUserRole->Close();
    qUserRole->SQL->Clear();
    qUserRole->SQL->Add("select ROLEID from USER ");
    qUserRole->SQL->Add("where USERID=:USERID ");
    qUserRole->ParamByName("USERID")->AsString=userID;
    qUserRole->Prepare();
    qUserRole->Open();
    sRole=qUserRole->FieldByName("ROLEID")->AsString;
查出来的结果报错,取到的值是乱码...然后又重新建了一个数据库,
Create DATABASE IF NOT EXISTS bbb default charset latin1 COLLATE latin1_general_ci;依旧乱码
最后又建了一个数据库,
Create DATABASE IF NOT EXISTS bbb default charset latin1;这次取到的值是NULL,
这是怎么回事?  MySql默认的校对是哪种?

解决方案 »

  1.   

    唔 latin1默认的校对原来是latin1_swedish_ci谁来解释下不同字符集或者校对为什么会出现不同的查询结果?
      

  2.   


    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  3.   

    说乱码可能不太确切
    我的失误..调试的时候观测取出来的变量的值,提示如下:
    E2122 Fuction Call terminated by unhandled exception 0xeedfade at address 0x7c812a5b我的期望值是空值...这条SQL其实是这样:
    select ROLEID from USER where USERID=NULL;
      

  4.   

    直接在 mysql 工具中试,排除你的软件和程序的影响。select ROLEID from USER where USERID=NULL;
    仅这句SQL应该不会有任何问题
      

  5.   

    嗯 在mysql工具中这条SQL执行没有错误...在想可能是字符集的原因,utf8或者非latin1默认校对的数据库返回的NULL在程序里就是乱码?我用的是C++ Builder的BDE连接的ODBC明天再研究,要去车站接人了...
      

  6.   

    那显然不是MYSQL的问题,是你的ODBC配置的问题了。
      

  7.   

    ODBC配置?指的是Details选项卡里面的内容么?我全部设置的默认,没有什么不同... show full columns from USER;正常的数据库显示如下结果:+----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    | Field    | Type        | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |
    +----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    | USERID   | varchar(10) | latin1_swedish_ci | NO   | PRI | NULL    |       | select,insert,update,references |         | 
    | USERNAME | varchar(10) | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    | PASSWORD | varchar(10) | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    | ROLEID   | varchar(6)  | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    +----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    不正常的数据库显示如下结果:+----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    | Field    | Type        | Collation         | Null | Key | Default | Extra | Privileges                      | Comment |
    +----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
    | USERID   | varchar(10) | latin1_swedish_ci | NO   | PRI | NULL    |       | select,insert,update,references |         | 
    | USERNAME | varchar(10) | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    | PASSWORD | varchar(10) | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    | ROLEID   | varchar(6)  | latin1_swedish_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    +----------+-------------+-------------------+------+-----+---------+-------+---------------------------------+---------+
      

  8.   

    发错了
    不正常的结果如下:+----------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
    | Field    | Type        | Collation       | Null | Key | Default | Extra | Privileges                      | Comment |
    +----------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
    | USERID   | varchar(10) | utf8_general_ci | NO   | PRI | NULL    |       | select,insert,update,references |         | 
    | USERNAME | varchar(10) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    | PASSWORD | varchar(10) | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    | ROLEID   | varchar(6)  | utf8_general_ci | YES  |     | NULL    |       | select,insert,update,references |         | 
    +----------+-------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
      

  9.   


    select ROLEID from USER where USERID IS NULL;
      

  10.   

    我的问题类似   有一台机器解决, 但现在没有彻底解决这个问题  也不知道自己是如何解决的java +mysql 执行代码发生如下错误 
    业务描述: 
    源库 的表 以及该表里所有字段 全部都是latin1 
    目的库的表 以及该表里所有字段 也全部都是latin1 
    现在发现从源库 用java代码取出的数据是当是某些不明国家的字符集的时候insert他们到目的库发现失败 (我将这些字段类型改为utf8 发现导出是成功的  但是工程禁止使用utf8, 所以只能考虑其他方法解决问题) Â?panilsko - 1. liga - basketbal" eventid="183511.1 
    Exception in thread "main" java.sql.SQLException: Incorrect string value: '\xC2\x8Apani...' for column 'colName' at row 1 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961) 这里'colName' 字段类型是varchar  字符集是latin1 不允许修改 
    代码部分如下 
    colNam=new String(colNam.getBytes("utf-8"),"latin1"); //我已经对这个字符进行了转换 
    PreparedStatement pStmt=null; 
    pStmt=conn.prepareStatement("INSERT INTO aa" + 
                    "(id,typeId,colName)"+ 
                    " values(?,?,?)"); 
    conn.setAutoCommit(false); pStmt.setString(1,id); 
    pStmt.setString(2,typeId); 
    pStmt.setString(3,colName); 
    int j=pStmt.executeUpdate(); 
    conn.commit(); 
    不知道如何解决问题  (提示 我在某台机器上是可以正常执行这段代码,数据也全部导到目的db机器;但是换到其他机器就是通不过 Exception in thread "main" java.sql.SQLException: Incorrect string value: '\xC2\x8Apani...' for column 'colName' at row 1)