MySQL 的「非法混合排序規則」錯誤故障排除
大型資料集有時會觸發 MySQL 令人沮喪的「非法混合排序規則」錯誤。當比較具有不一致字元集和排序規則的資料時,會發生這種情況。
問題
考慮這個查詢:
<code class="language-sql">SELECT COUNT(*) AS num FROM keywords WHERE campaignId = '12' AND LCASE(keyword) = 'hello again 昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€'</code>
執行此指令可能會產生:
<code>Error Number: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='</code>
解:字串轉義與編碼變更
有兩種主要方法可以解決此問題:轉義有問題的字串,或更改資料庫和表格編碼。
方法一:字串轉義(暫時修復)
轉義字串可以暫時避免錯誤:
<code class="language-sql">SET collation_connection = 'utf8_general_ci'; SELECT COUNT(*) AS num FROM keywords WHERE campaignId = '12' AND LCASE(keyword) = 'hello again \"昔 ã‹ã‚‰ ã‚ã‚‹ å ´æ‰€\"'</code>
然而,這是一個創可貼解決方案,可能會在未來產生問題。
方法二:更改資料庫和表格編碼(永久解決方案)
要永久修復,請標準化您的資料庫和表格以使用 utf8_general_ci
:
<code class="language-sql">ALTER DATABASE your_database_name CHARACTER SET utf8 COLLATE utf8_general_ci; ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;</code>
透過將連接排序規則和資料庫/表編碼統一為 utf8_general_ci
,您可以確保一致的資料處理並消除排序規則不符。 這是推薦的方法。
以上是如何修復 MySQL 的「非法混合排序規則」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!