Illegal mix of co…

數據庫查詢提示:
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='

錯誤由於mysql數據庫的默認字符集格式與表的數據庫字符集不同造成,通過修改字符集即可。


常用命令:
修改你的數據庫的字符編碼:進入Mysql數據庫,通過命令修改你的數據庫字符編碼: ALTER DATABASE `databaseName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci  (修改後需要重啓Mysql數據庫)
 如果你的表以及表裏的字段使用了不正確的字符編碼,同樣需要修正過來:命令:
 修改表的編碼: ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
 修改字段的編碼: ALTER TABLE `tableName` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL 

官方文檔:
 當前,utf8_unicode_ci校對規則僅部分支持Unicode校對規則算法。一些字符還是不能支持。並且,不能完全支持組合的記號。這主要影響越南和俄羅斯的一些少數民族語言,如:Udmurt 、Tatar、Bashkir和Mari。

     utf8_unicode_ci的最主要的特色是支持擴展,即當把一個字母看作與其它字母組合相等時。例如,在德語和一些其它語言中‘ß'等於‘ss'。

     utf8_general_ci是一個遺留的 校對規則,不支持擴展。它僅能夠在字符之間進行逐個比較。這意味着utf8_general_ci校對規則進行的比較速度很快,但是與使用utf8_unicode_ci的 校對規則相比,比較正確性較差)。

     例如,使用utf8_general_ci和utf8_unicode_ci兩種 校對規則下面的比較相等:
     Ä = A

 


     Ö = O
     Ü = U

     兩種校對規則之間的區別是,對於utf8_general_ci下面的等式成立:
     ß = s

     但是,對於utf8_unicode_ci下面等式成立:
     ß = ss

     對於一種語言僅當使用utf8_unicode_ci排序做的不好時,才執行與具體語言相關的utf8字符集 校對規則。例如,對於德語和法語,utf8_unicode_ci工作的很好,因此不再需要爲這兩種語言創建特殊的utf8校對規則。

     utf8_general_ci也適用與德語和法語,除了‘ß'等於‘s',而不是‘ss'之外。如果你的應用能夠接受這些,那麼應該使用utf8_general_ci,因爲它速度快。否則,使用utf8_unicode_ci,因爲它比較準確。




解決方法:
1  登錄mysql
~:mysql -uroot -p


2  查看MySQL數據庫服務器和數據庫MySQL字符集
~:mysql> show variables like '%char%';


3 直接查看字符集排序規則
~:show variables;



4 修改數據庫中不相符的表

 ALTER TABLE `tableName` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci


5 注意是否是每個字段都有編碼規則


6  修改完成即可




























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章