我已经检查了每个表的排序规则类型,并且它们具有相同的排序规则。
错误:#1271 -操作'UNION‘的排序规则组合非法
请参考以下查询:
$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);发布于 2015-11-01 09:16:35
要解决这个问题,您可能需要将选择列表(在一个或多个查询中)中的一些列引用替换为一个表达式,如CONVERT(name USING utf8) AS name.
最有可能的问题是查询返回具有不同字符集的列。(错误消息标识出有问题的UNION操作,而不是其他比较谓词( WHERE子句中的字符比较,在where子句中也可能发生这种类型的错误。)
要对此进行调试,需要检查每个查询中返回的表达式的字符集,并进行比较。要缩小范围,您可以尝试测试查询的子集,以...
(query1) UNION (query2)
(query1) UNION (query3)
(query1) UNION (query4)这应该会缩小导致问题的组合范围。
然后检查返回的字符型列的字符集,这些字符集包含在表/列定义中。
参考:
MySQL CONVERT函数引用:
http://dev.mysql.com/doc/refman/5.6/en/charset-convert.html
要显示MySQL中可用的字符集(和排序规则),请执行以下操作:
SHOW COLLATION要检查查询中引用的列的字符集...
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
发布于 2016-06-28 17:30:20
我能够在CREATE VIEW查询中修复此错误,该查询在
COALESCE(<TIMESTAMP>,<DATETIME>)按照建议,通过将结果转换为DATETIME来执行here,例如:
CAST( COALESCE( <TIMESTAMP> , <DATETIME> ) AS DATETIME发布于 2015-11-01 08:33:15
确保这些列具有相同的数据类型、编码和名称。例如,其中一个联合的名称为name,下一个联合语句的名称为cat_name。确保select中的别名在所有联合中都是相同的。
https://stackoverflow.com/questions/33458001
复制相似问题