MySQL的Illegal mix of collationsy异常原因和解决方法

Posted 码农编程进阶笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的Illegal mix of collationsy异常原因和解决方法相关的知识,希望对你有一定的参考价值。

 

原创 2008年12月25日 11:54:00
 

 今天在使用数据库临时表的游标时,发现了这个异常。
经查找资料,最终结果。这里和大家分享一下。 字符集问题还是一定要统一的才是最简单的。

create temporary table temp2(mc1 varchar(20) default ‘‘,mc2 varchar(20)default ‘‘,mc3 varchar(20)default ‘‘,mc4 varchar(20)default ‘‘,mc5 varchar(20)default ‘‘,parentid varchar(20),levelnum int); -- 生成临时表

declare mycur67 CURSOR for select concat(replace(space(levelnum-1),space(1),‘------‘),mc1,mc2,mc3,mc4,mc5) as mc,parentid as location from temp2;

异常信息为:
Illegal mix of collations for operation ‘concat‘

将concat的代码去掉后面的部分内容,运行结果为
declare mycur67 CURSOR for select concat(replace(space(levelnum-1),space(1),‘------‘),mc1) as mc,parentid as location from temp2;

错误:Illegal mix of collations (utf8_general_ci,COERCIBLE) and (gb2312_chinese_ci,IMPLICIT) for operation ‘concat‘

可见,是2个字段的编码类型不一致造成的。

原来我的数据库创建时,选择的是gb2312编码,而字段操作默认为UTF8的编码。 绝对统一使用UTF-8

create temporary table temp2(mc1 varchar(20) default ‘‘,mc2 varchar(20)default ‘‘,mc3 varchar(20)default ‘‘,mc4 varchar(20)default ‘‘,mc5 varchar(20)default ‘‘,parentid varchar(20),levelnum int)DEFAULT CHARSET=UTF8;

运行结果正常。

经查找资料,如下说的很清楚
mysql> show variables like "%character%"; show variables like "%collation%"; +--------------------------+----------------------------+
| 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)

+----------------------+-------------------+
| 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)

fix it with
set collation_database=utf8_general_ci;
set collation_connection=utf8_general_ci;
set collation_server=utf8_general_ci;


















































以上是关于MySQL的Illegal mix of collationsy异常原因和解决方法的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的Illegal mix of collationsy异常原因和解决方法

执行mysql语句报错 Illegal mix of collations……

MySQL Error: Illegal mix of collations for operation 'concat'

mysql5.6修改字符编码,ERR:Illegal mix of collations for operation 'concat'

mysql union语句报错:Error Code: 1271. Illegal mix of collations for operation ‘UNION‘

错误之Illegal mix of collations for operation 'like'