错误是在你的结果集中有两种字符集。
比如说你在两个表联合查询,一个表的字符集是latin1,另一个是utf8,这样在你的结果集中有两种字符集,mysql会报上面的错误。
一个表中不同的字段使用不同的字符集,也是一个道理。
用SHOW CREATE TABLE table_name;可以看出具体的字符集设置。解决方法:
将不同的字符集,转化成统一的字符集。

解决方案 »

  1.   

    是的。我查了帮助手册,说是user的字符集没有设,默认为utf8,我如何将其转为latin1.
      

  2.   

    After an upgrade to MySQL 4.1, the statement fails: mysql> SELECT SUBSTRING_INDEX(USER(),'@',1);
    ERROR 1267 (HY000): Illegal mix of collations
    (utf8_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE)
    for operation 'substr_index'The reason this occurs is that usernames are stored using UTF8 (see section 11.6 UTF8 for Metadata). As a result, the USER() function and the literal string '@' have different character sets (and thus different collations): mysql> SELECT COLLATION(USER()), COLLATION('@');
    +-------------------+-------------------+
    | COLLATION(USER()) | COLLATION('@')    |
    +-------------------+-------------------+
    | utf8_general_ci   | latin1_swedish_ci |
    +-------------------+-------------------+One way to deal with this is to tell MySQL to interpret the literal string as utf8: mysql> SELECT SUBSTRING_INDEX(USER(),_utf8'@',1);
    +------------------------------------+
    | SUBSTRING_INDEX(USER(),_utf8'@',1) |
    +------------------------------------+
    | root                               |
    +------------------------------------+Another way is to change the connection character set and collation to utf8. You can do that with SET NAMES 'utf8' or by setting the character_set_connection and collation_connection system variables directly. 
      

  3.   

    表的编码转换可以用(MySQL Version > 4.12)
    ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;之前的版本可以用:
    ALTER TABLE tbl_name CHARACTER SET charset_name;
      

  4.   

    我不是要转换表的字符集,我是想把用户的字符集设置为latin1;