關於mysql錯誤:Illegal mix of collations for operation '='的理解

Error: Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '='

意思是說:操作符“=”比較的字符集不一致,一個是gbk_chinese_ci,一個是latin1_swedish_ci。

我是在做discuz修改的時候出現這個問題的,第一次遇到。

讓我納悶的是,我的文件和數據庫字段肯定都是gbk的,這個是我一直注意的,爲啥會出現這個變態的問題呢?

對於出現問題的原因我始終沒有弄明白,難道是因爲字段內容爲空就默認是atin1_swedish_ci類型?!

先說解決的辦法,以後再研究原因:

第一種解決辦法:

修改sql語句爲如下格式:
    $sql="select * from {$tablepre}members where nickname='".$nickname."'";    修改爲
    $sql="select * from {$tablepre}members where nickname=binary('".$nickname."')";    

第二種方法:

修改數據庫的字符集。我沒有用過這個方法,但是感覺上應該是可以的。


如果MySQL數據庫已經安裝好,可以使用下列SQL命令查看MySQL當前的字符集設置:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| 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)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| 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)

依次執行:

set character_set_client =gb2312;

set character_set_connection =gb2312;

set character_set_database =gb2312;

set character_set_results =gb2312;

set character_set_server =gb2312;

set character_set_system =gb2312; --此處utf-8也可以

然後執行:

SET collation_server = gb2312_chinese_ci


SET collation_database = gb2312_chinese_ci

SET collation_connection =gb2312_chinese_ci

執行完之後,請檢查mysql下每個數據庫,表,字段是否都是gb2312,不是則改過來,這樣子就不會出現

Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (gb2312_chinese_ci,IMPLICIT) for operation '='這個錯誤了,網上有資料說要重裝,其實根本就不必,改動其編碼即可

第三種方法:網上看到的,先記錄一下。

1.如果安裝mysql的編碼已不能更改,很多朋友是購買虛擬主機建立網站,無權更改MYSQL的安裝編碼,這一關我們可以跳過,因爲只要後面的步聚正確,一樣能解決亂碼問題
2.修改數據庫編碼,如果是數據庫編碼不正確: 可以在phpmyadmin 執行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將test數據庫的編碼設爲utf8
3.修改表的編碼:ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin
以上命令就是將一個表category的編碼改爲utf8
4.修改字段的編碼:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是將test表中 dd的字段編碼改爲utf8
5.如果是這種情況容易解決,只需檢查下頁面,修改源文件的charset即可
, //這個正確就無問題了
6.這種情況也是修改頁面charset即可

發佈了47 篇原創文章 · 獲贊 3 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章