我在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/,但我根本无法让它工作。
所以我需要构建一个更好的查询或以某种方式使用整理函数,但是如何?
提前致谢。
克雷格
答案 0 :(得分:7)
请参阅以下问题:MySQL Encoding Question
我认为问题实际上是处理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。
希望这有帮助,
...约翰