为什么MySQL order by random_bytes没有效果?

Jos*_*osh 5 mysql

order by random_bytes(8)没有影响。为什么?

使用 MySQL(在 AWS 无服务器 v2 上)

考虑这个测试过程:

create procedure Test()
begin

    create temporary table Meow (Id bigint);
    insert into Meow (Id) values (1);
    insert into Meow (Id) values (2);
    insert into Meow (Id) values (3);
    insert into Meow (Id) values (4);
    insert into Meow (Id) values (5);

    select * from Meow order by random_bytes(8);
   
    drop temporary table Meow;

end
Run Code Online (Sandbox Code Playgroud)

执行它总是会产生:1,2,3,4,5

所以我尝试了其他选择语句...首先,将其提取到子查询中:

    select * from 
    (
        select *, random_bytes(8) rnd from Meow
    ) a order by rnd;
Run Code Online (Sandbox Code Playgroud)

但结果仍然是1,2,3,4,5。实际输出:

    [
      { Id: 1, rnd: <Buffer 3a 9d 00 9e b7 c5 80 91> },
      { Id: 2, rnd: <Buffer a0 5e 33 da 0c c0 5c 80> },
      { Id: 3, rnd: <Buffer 1a f0 78 84 85 29 a3 22> },
      { Id: 4, rnd: <Buffer 77 f0 be 54 37 44 94 15> },
      { Id: 5, rnd: <Buffer c3 cc c1 2d 79 2b f3 df> }
    ]
Run Code Online (Sandbox Code Playgroud)

然后我怀疑它可能不喜欢使用字节,所以我尝试使用字符串:

    select * from 
    (
        select *, hex(random_bytes(8)) rnd from Meow
    ) a order by rnd;
Run Code Online (Sandbox Code Playgroud)

但同样,它始终是 1, 2, 3, 4, 5。实际输出:

    [
      { Id: 1, rnd: '8896C5F824A86BCF' },
      { Id: 2, rnd: '42C16697444537C6' },
      { Id: 3, rnd: '538D11E7FDA91D10' },
      { Id: 4, rnd: '09F3069EF0A36E6C' },
      { Id: 5, rnd: '706DEC985E298FA5' }
    ]
Run Code Online (Sandbox Code Playgroud)

为什么?

PS:我用 进行了测试order by Id desc,结果返回 5, 4, 3, 2, 1。

编辑(回答评论Q): select Version()= 8.0.23 ...表与临时表没有区别。

解答:这是一个优化器错误,已由 mysql 团队验证。错误提交地址:https://bugs.mysql.com/bug.php? id=111252

更新:在 8.0.34 中修复 - https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-34.html