MySQL联盟非法混合排序规则

Cra*_*art 3 php mysql sql collate

我的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
Run Code Online (Sandbox Code Playgroud)

在"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函数,但是如何?

提前致谢.

克雷格

Joh*_*ler 8

请参阅以下问题: 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
Run Code Online (Sandbox Code Playgroud)

或者,将表的列编码更改为UTF8.

希望这可以帮助,

约翰...

  • 请注意,`ON tags.tag = theValues.Vals COLLATE utf8_general_ci`也应该有效. (5认同)