sal*_*usa 1 mysql union collation sql-like
我检查了每个表的排序规则类型,并且它们具有相同的排序规则.
错误:#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);
Run Code Online (Sandbox Code Playgroud)
要解决此问题,您可能需要使用表达式替换SELECT列表中的一些列引用(在一个或多个查询中)CONVERT(name USING utf8) AS name.
最可能的问题是查询返回具有不同字符集的列.(错误消息标识出有问题的UNION操作,而不是其他比较谓词(WHERE子句中的字符比较,也可能发生此类错误).
要调试它,您需要检查每个查询中返回的表达式的字符集,并进行比较.要缩小范围,您可以尝试测试查询的子集...
(query1) UNION (query2)
(query1) UNION (query3)
(query1) UNION (query4)
Run Code Online (Sandbox Code Playgroud)
这应该缩小导致问题的组合范围.
然后检查要返回的字符类型列的字符集,作为表/列定义的一部分包含在内.
参考文献:
MySQL CONVERT函数参考:
http://dev.mysql.com/doc/refman/5.6/en/charset-convert.html
要显示MySQL中可用的字符集(和排序规则):
SHOW COLLATION
Run Code Online (Sandbox Code Playgroud)
检查查询中引用的列的字符集...
SHOW CREATE TABLE tbl_landt
SHOW CREATE TABLE tbl_land_cat
etc.
Run Code Online (Sandbox Code Playgroud)
另外,请参阅StackOverflow中的这个(旧)问题,以获得有关MySQL中字符串强制性的更详细讨论...
对mysql中的"非法混合排序"错误进行故障排除 /sf/ask/212052501/ions-error-in-mysql
| 归档时间: |
|
| 查看次数: |
6057 次 |
| 最近记录: |