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異常原因和解決方法