2015-07-10 16 views
12

我寫一個查詢,無法正常工作正常工作的MySQL查詢不與NOT IN

我的查詢:

SELECT * 
FROM admin_marker 
WHERE admin_marker.city NOT IN (SELECT target FROM messsage) 

它說

#1267 - 排序規則的非法組合
(utf8_general_ci,IMPLICIT)和
(utf8_unicode_ci,IMPLICIT)for operation'='

+2

檢查每個表的排序規則類型,並確保它們具有相同的排序規則。 http://stackoverflow.com/a/5747047/2899618 –

+0

這兩列都有相同的排序規則utf8_general_ci \t @Uchiha –

回答

16

你所面臨的問題是由於兩個表之間不兼容的排序規則。來左右它的方法之一是使用COLLATE子句中查詢:

SELECT * 
FROM admin_marker 
WHERE admin_marker.city NOT IN (SELECT target COLLATE utf8_general_ci 
           FROM messsage) 

Demo here

3

這通常是通過比較兩個不兼容的排序規則或通過嘗試將不同排序規則的數據選擇到組合列引起的。條款COLLATE允許您指定查詢中使用的排序規則。

或者你可以ALTER TABLE匹配COLLATE

3

問題是在兩個表之間的整理,所以請儘量COLLATE對於這一點,可能這是解決由容易幫助COLLATE。

SELECT * FROM admin_marker WHERE admin_marker.city NOT IN (SELECT target COLLATE utf8_general_ci FROM messsage) 

,並且還檢查的該數據的基礎上是相同

不相容歸類或通過嘗試來選擇不同的核對數據組合成組合列。子句COLLATE允許您指定查詢中使用的排序規則。