[英]MySQL - Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation 'UNION'
[英]Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) in Grails
我嘗試在Grails中以cp1251_general_ci編碼(支持俄語字符)使用MySQL。 但是,當我啟動我的應用程序時,在執行bootstrap.gsp
,出現了以下錯誤:
2015-06-04 15:52:28,889 [localhost-startStop-1]
ERROR spi.SqlExceptionHelper - Illegal mix of collations (cp1251_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE)
for operation '='
在MySQL中,我刪除了一個舊數據庫並使用所需的編碼創建了新數據庫,但是仍然出現此錯誤。 我該如何解決?
該修復程序實際上取決於引發錯誤的語句。
基本上,MySQL抱怨=
兩側的表達式,字符集/排序規則不兼容。
該錯誤是由於要比較的兩個表達式之間的字符集不匹配。
當我運行創建內聯視圖(派生表)的語句,並使用客戶端連接的字符集創建派生表(按預期)時,通常會遇到此錯誤,然后在外部查詢中進行相等比較到具有不兼容字符集的表中的列,例如:
SELECT l.latin1col
FROM latin1table l
JOIN (SELECT 'utf8string' AS utf8col) s
ON s.utf8col = l.latin1col
內聯視圖中未指定列的字符集,因此派生表繼承自character_set_connection
變量。 一種可能的解決方法是更改會話變量的設置。 (然后,當該語句運行時,派生表中的列就是該字符集。)
另一個解決方法是在嵌入式視圖中為列指定字符集,例如
SELECT l.latin1col
FROM latin1table l
JOIN (SELECT _latin1'utf8string' AS latin1col) s
-- ^^^^^^^
ON s.latin1col = l.latin1col
要解決您的問題,您需要找出哪個表達式是哪個字符集,並在一側或另一側進行適當的調整。
也就是說, cp1251_general_ci
歸類是來自客戶端連接,還是來自表列。
如果在語句中使用文字,則可以將其轉換為合適的字符集/排序規則,以便使用CONVERT
函數將其與其他字符集/排序規則的列進行比較...
例如,而不是這樣:
WHERE col = 'myliteral'
您可以執行以下操作:
WHERE col = CONVERT('myliteral' USING latin1)
- 或 -使用文字值,您也可以執行此操作
WHERE col = _latin1'myliteral'
如果還需要指定排序規則,則可以在其后加上COLLATE關鍵字,並指定對字符集有效的排序規則:
WHERE col = CONVERT('myliteral' USING latin1) COLLATE latin1_swedish_ci
從您的問題中不清楚將character_set_connection
和collation_connection
變量設置為什么。
SELECT @@session.character_set_connection
, @@session.collation_connection
, @@global.character_set_connection
, @@global.collation
或將數據庫中字符列的字符集和排序規則設置為什么,
SHOW CREATE TABLE mytable;
注意:
數據庫級別的角色集設置是默認值,該默認值應用於添加到數據庫中但未定義角色集/排序規則的新表。
表的“默認字符集”設置是將用於將添加的未指定字符集/排序規則的新列的字符集。
發出一條語句來更改表的字符集,如下所示:
ALTER TABLE mytable CHARACTER SET latin1 COLLATE latin1_swedish_ci
不改變對於那些已經在表中的列的字符集和校對。 它只會影響沒有指定字符集/排序規則的新添加的列。 同樣的情況適用於ALTER DATABASE
語句...對現有表和列沒有任何影響,僅對創建的未指定字符集/排序規則的新表具有任何影響。
也許我很幸運,但是我所做的是將所有nvarchar都更改為varchar,我在000webhost服務器上收到錯誤,一切正常
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.