【问题标题】:Is this a bug in MySQL query parsing?这是 MySQL 查询解析中的错误吗?
【发布时间】:2013-03-25 18:24:11
【问题描述】:

我正在运行一些查询,并遇到了一些我认为看起来像 MySQL 错误的东西。我运行了以下查询:

select s.id, a.name as a_name, s.label, st.name as st_name,
-- substr(f.name FROM 1 FOR locate('cl', f.name)-2),
-- substr(f.name FROM locate('cl', f.name)-2 FOR 1),
substr(f.name FROM locate('cl', f.name)),
count(1)
from table_sf sf,
table_f f,
table_s s,
table_a a,
table_st st
where f.id = sf.f_id
and s.id = sf.s_id
and s.a_id = a.id
and s.st_id = st.id
group by 1, 2, 3, 4, 5
having count(1) != 2;

默认情况下,当您没有在计算字段上指定列名时,MySQL 会分配列名。通常,它只是字段的完整“公式”,例如,count(1) 表示上面查询中的最后一个字段。但是,似乎在查询中添加 cmets 会使 MySQL 关闭。结果是正确的,但是字段名是完全错误的。这些是我得到的列标题:

 id    name         label         name       -- substr(f.name FROM 1 FOR locate('cl', f.name)-2),       count(1)

请注意,第 5 列的名称是 first 评论,甚至不是相邻的评论。它确实认识到有两个 cmets,因为它只将第一个指定为下一个计算字段的列名,而没有别名。这是预期的行为吗?或者这是一个 MySQL 错误?我正在运行 MySQL 5.1.63,在 OS X 上使用 SequelPro 作为客户端。

更新: 还在 MySQL 5.4.3 安装上尝试过,并且该字段在那里正确显示。也许这是 5.1.x 代码库中的错误?

【问题讨论】:

  • 你能告诉你如何运行查询吗?是mysql命令行客户端还是其他工具?
  • @woz:在这种情况下,这似乎是合理的。请实际阅读问题。
  • @Dukeling:谢谢,好点子。 OP:请减少您问题中的代码。
  • 删除了我的评论,因为我不确定它是否完全一样,但是here it is again

标签: mysql


【解决方案1】:

所以,做了一些研究,似乎我找到了原来的错误。前段时间在 5.0 中被报道过,只针对 5.2 进行修复。

http://bugs.mysql.com/bug.php?id=25224

所以,如果您运行的是 MySQL 5.1.x,您似乎会遇到这个问题。 MySQL 的回应似乎只是升级到更新的版本。

【讨论】:

    猜你喜欢
    • 2011-05-24
    • 2016-05-29
    • 1970-01-01
    • 2016-04-02
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多