簡體   English   中英

MySQL聯盟非法混合排序規則

[英]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”的列中,否則標記列是空白的。

我嘗試過使用Collat​​e: http//www.answermysearches.com/mysql-fixing-illegal-mix-of-collat​​ions-message/352/ ,但我根本無法使用它。

所以我需要構建一個更好的查詢或以某種方式使用collat​​e函數,但是如何?

提前致謝。

克雷格

請參閱以下問題: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM