2010-12-07 74 views
13

我在MySQL中的存儲過程失敗,出現Mysql::Error: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='存儲過程中的排序規則非法混合

當它在SELECT子句中嘗試將VARCHAR列與VARCHAR參數傳遞給此過程時,該過程失敗。

我表格中的所有列都有utf8_unicode_ci排序規則。數據庫整理是一樣的。我甚至在`/config/database.yml中指定了排序規則。

然而,當我運行/script/console我已經設置下列變量:

>> ActiveRecord::Base.connection.select_rows "show variables like '%colla%'" 
=> [["collation_connection", "utf8_general_ci"], ["collation_database", "utf8_unicode_ci"], ["collation_server", "utf8_general_ci"]] 

而且可能是最有趣的事實是,我有相同的歸類(甚至查詢覈對變量從同一個MySQL服務器上的另一個數據庫Rails控制檯給出了相同的結果),它運行這個存儲過程沒有任何問題。

感謝您的幫助。

+0

我剛剛發現我的一個表已整理設置爲`utf8_general_ci`一套是inproper在我的數據庫,這是原因。感謝您花時間在這個問題上。 – skalee 2010-12-07 20:32:22

回答

17

要速戰速決,

SELECT * FROM YOUR_TABLE 
WHERE [email protected]_VARIABLES COLLATE utf8_general_ci; 

OR

SELECT * FROM YOUR_TABLE 
WHERE [email protected]_VARIABLES COLLATE unicode_ci; 
/* depends on the collation for YOUR_COL */ 

永久性的修復

你可能會需要使用正確的重新創建你的數據庫/相同的排序規則

+1

+1感謝您的回答。您發佈的鏈接非常有用,它們介紹了與字符集有關的手冊章節中未提及(或未明確提及)的一些信息。其實,你的回答讓我間接地產生了真正的理由。 – skalee 2010-12-07 20:37:24

相關問題