[英]MySQL Union illegal mix of collations
我的PHP查詢中有以下內容:
SELECT tags.tag, theValues.*
FROM ch09.tbl_tags tags
RIGHT JOIN ((SELECT 'dog' as 'Vals')
UNION (SELECT 'cat' as 'Vals')) theValues on tags.tag = theValues.Vals
在“RIGHT JOIN”之后,括號內的所有內容都是從用戶輸入中即時創建的。
它在MySQL 4中運行良好,但我剛剛安裝了一台新計算機並安裝了5.5,將SQL轉儲導入為UTF-8
。 但我得到:
“非法混合排序(latin1_swedish_ci,IMPLICIT)和(utf8_general_ci,COERCIBLE)進行操作'='”
可能有一種更好的方法來構造我的查詢,我需要的是用戶在一列中輸入的所有內容作為“ Vals
”,如果tbl_tags.tag
有匹配的標記,那么它應該在名為“tag”的列中,否則標記列是空白的。
我嘗試過使用Collate: http : //www.answermysearches.com/mysql-fixing-illegal-mix-of-collations-message/352/ ,但我根本無法使用它。
所以我需要構建一個更好的查詢或以某種方式使用collate函數,但是如何?
提前致謝。
克雷格
請參閱以下問題: MySQL編碼問題
我認為問題實際上涉及Column和SQL文本的編碼。 要解決此問題,請嘗試在WHERE子句中使用CONVERT(aaa USING bbb)函數,如下所示:
SELECT tags.tag, theValues.*
FROM ch09.tbl_tags tags
RIGHT JOIN ((SELECT 'dog' as 'Vals')
UNION (SELECT 'cat' as 'Vals')) theValues
ON CONVERT(tags.tag USING utf8) = theValues.Vals
或者,將表的列編碼更改為UTF8。
希望這可以幫助,
約翰...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.