Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中,获取一个错误:1271-操作“UNION”的排序规则非法混合_Mysql_Sql_Union - Fatal编程技术网

在MySQL中,获取一个错误:1271-操作“UNION”的排序规则非法混合

在MySQL中,获取一个错误:1271-操作“UNION”的排序规则非法混合,mysql,sql,union,Mysql,Sql,Union,我正在尝试合并来自Drupal和phpBB表的评论和帖子 这是我的SQL: ( SELECT f.forum_name AS section, p.topic_id, p.forum_id, p.post_id, p.poster_id AS uid, u.username AS user, p.post_time AS post_time, p.post_subject AS su

我正在尝试合并来自Drupal和phpBB表的评论和帖子

这是我的SQL:

(
SELECT  f.forum_name AS section,
        p.topic_id,
        p.forum_id,
        p.post_id,
        p.poster_id AS uid,
        u.username AS user,
        p.post_time AS post_time,
        p.post_subject AS subject
FROM phpbb_posts p
JOIN phpbb_forums f ON f.forum_id = p.forum_id
JOIN phpbb_topics t ON p.post_id = t.topic_last_post_id
JOIN phpbb_users u ON p.poster_id = u.user_id
)
UNION (

SELECT  NULL AS section,
        comments.nid AS topic_id,
        NULL AS forum_id,
        comments.cid AS post_id,
        comments.uid AS uid,
        comments.name AS user,
        comments.timestamp AS post_time,
        comments.subject AS subject
FROM dr_node node
LEFT JOIN dr_comments comments ON node.nid = comments.nid
WHERE node.status =1
)
ORDER BY post_time DESC
LIMIT 7
它给了我

错误:1271-操作“UNION”的排序规则非法混合

问题在哪里?感谢您的帮助。

检查您的表phpbb_posts和dr_节点排序规则。最有可能的是,它们是使用不同的排序规则创建的,比如一个使用拉丁语,另一个使用utf-8。因此,你面临着这个问题

编辑:

两个表应该具有相同的排序规则;但在你的情况下,@Dan;很可能您正试图将第一个查询中的f.forum_name作为部分与第二个查询中的NULL作为部分进行比较。[正如您已经提到的,您的查询可以从PHPMyAdmin中工作]

如前所述

试着设置这个和它如何去枯萎

SET collation_connection = utf8_general_ci;


这是从问题中得出的对OP有效的解决方案:

我刚刚找到了解决办法。问题在于主题栏。我在第二次选择中为主题添加了COLLATE utf8\u unicode\u ci


注释掉select子句中除节之外的所有内容。运行查询。如果失败,则可能是因为您选择了null。您可以通过选择一个空字符串来修复此问题。如果成功,将字段逐个添加回select子句,直到失败。您添加的最后一个字段将导致此问题。检查字符集,检查我刚刚发现的这个线程,这是因为列主题。我能用它做什么?SET命令没有帮助。请将您的更新作为答案发布,然后在48小时后,当站点允许您时,接受它。把这个问题留待讨论对社区没有好处。更多:我很高兴你找到了解决问题的办法。但是,不应将实际答案/解决方案编辑到您的问题中。一般来说,你应该通过提问来澄清问题,但不要在问题中包含答案。你应该用你用来解决问题的代码创建你自己的答案,然后接受它。在接受你自己的答案之前,系统可能需要48小时的延迟。当您自己解决了问题后,.dr_节点是utf8_general_ci,phpbb_posts是utf8_bin。我该怎么办?我两个都试过了。相同的错误我在第一次选择之前添加了SET命令
SET character_set_connection = utf8;
(
SELECT  f.forum_name AS section,
        p.topic_id,
        p.forum_id,
        p.post_id,
        p.poster_id AS uid,
        u.username AS user,
        p.post_time AS post_time,
        p.post_subject AS subject
FROM phpbb_posts p
JOIN phpbb_forums f ON f.forum_id = p.forum_id
JOIN phpbb_topics t ON p.post_id = t.topic_last_post_id
JOIN phpbb_users u ON p.poster_id = u.user_id
)
UNION (

SELECT  NULL AS section,
        comments.nid AS topic_id,
        NULL AS forum_id,
        comments.cid AS post_id,
        comments.uid AS uid,
        comments.name AS user,
        comments.timestamp AS post_time,
        comments.subject COLLATE utf8_unicode_ci AS subject 
FROM dr_node node
LEFT JOIN dr_comments comments ON node.nid = comments.nid
WHERE node.status =1
)
ORDER BY post_time DESC
LIMIT 7