5

我的 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那么它应该在一个名为“标签”的列中,否则标签列是空白的。

我曾尝试使用 Collat​​e:http ://www.answermysearches.com/mysql-fixing-illegal-mix-of-collat​​ions-message/352/ ,但我根本无法让它工作。

所以我需要构建一个更好的查询或以某种方式使用 collat​​e 函数,但是如何?

提前致谢。

克雷格

4

1 回答 1

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

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

希望这可以帮助,

约翰...

于 2012-11-03T20:28:12.437 回答