首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >#1271 - like查询中操作'UNION‘的排序规则非法混合

问#1271 - like查询中操作'UNION‘的排序规则非法混合
EN

Stack Overflow用户
提问于 2015-11-01 08:20:27
回答 3查看 11.3K关注 0票数 4

我已经检查了每个表的排序规则类型,并且它们具有相同的排序规则。

错误:#1271 -操作'UNION‘的排序规则组合非法

请参考以下查询:

代码语言:javascript
复制
$query = "(SELECT id, product_name, description, 'tbl_landt' as type FROM                                      tbl_landt WHERE product_name LIKE '%" . 
          $keyword . "%' OR description LIKE '%" . $keyword ."%') 
           UNION
           (SELECT id, name, null, 'tbl_land_cat' as type FROM tbl_land_cat WHERE name LIKE '%" . $keyword . "%') 
           UNION
           (SELECT tbl_sub_cat.id, tbl_sub_cat.name AS cat_name, null, 'tbl_sub_cat' as type FROM tbl_sub_cat WHERE name LIKE '%" . $keyword . "%')
           UNION
           (SELECT id, name, null, 'tbl_exl_cat' as type FROM tbl_exl_cat WHERE name LIKE '%" . $keyword . "%')";
           $squery = mysql_query($query);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-01 09:16:35

要解决这个问题,您可能需要将选择列表(在一个或多个查询中)中的一些列引用替换为一个表达式,如CONVERT(name USING utf8) AS name.

最有可能的问题是查询返回具有不同字符集的列。(错误消息标识出有问题的UNION操作,而不是其他比较谓词( WHERE子句中的字符比较,在where子句中也可能发生这种类型的错误。)

要对此进行调试,需要检查每个查询中返回的表达式的字符集,并进行比较。要缩小范围,您可以尝试测试查询的子集,以...

代码语言:javascript
复制
(query1) UNION (query2)
(query1) UNION (query3) 
(query1) UNION (query4)

这应该会缩小导致问题的组合范围。

然后检查返回的字符型列的字符集,这些字符集包含在表/列定义中。

参考:

MySQL CONVERT函数引用:

http://dev.mysql.com/doc/refman/5.6/en/charset-convert.html

要显示MySQL中可用的字符集(和排序规则),请执行以下操作:

代码语言:javascript
复制
SHOW COLLATION

要检查查询中引用的列的字符集...

代码语言:javascript
复制
SHOW CREATE TABLE tbl_landt
SHOW CREATE TABLE tbl_land_cat
etc.

另外,有关MySQL中字符集的强制性的更详细的讨论,请参阅StackOverflow中的这个(旧的)问题...

https://stackoverflow.com/questions/3029321/troubleshooting-illegal-mix-of-collations-error-in-mysql

票数 11
EN

Stack Overflow用户

发布于 2016-06-28 17:30:20

我能够在CREATE VIEW查询中修复此错误,该查询在

代码语言:javascript
复制
COALESCE(<TIMESTAMP>,<DATETIME>)

按照建议,通过将结果转换为DATETIME来执行here,例如:

代码语言:javascript
复制
CAST( COALESCE( <TIMESTAMP> , <DATETIME> ) AS DATETIME
票数 1
EN

Stack Overflow用户

发布于 2015-11-01 08:33:15

确保这些列具有相同的数据类型、编码和名称。例如,其中一个联合的名称为name,下一个联合语句的名称为cat_name。确保select中的别名在所有联合中都是相同的。

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33458001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档