相同的查询但通过产生不同的结果进行排序

时间:2019-03-03 21:32:54

标签: mysql sql sql-order-by collation

我正在运行两个MySQL服务器(生产和测试)。我通过My​​SQL Workbench在两个查询上运行相同的查询,但是结果的顺序不同。是什么原因?

查询:

select table_name, table_collation 
from information_schema.tables 
where table_schema = 'orchestration' 
order by table_name asc`

Here's the actual output

3 个答案:

答案 0 :(得分:1)

  

测试版本为8.0.11;产量是5.6.33

MySQL 8.0完全更改了INFORMATION_SCHEMA的内部实现。有关公告,请参见https://mysqlserverteam.com/mysql-8-0-improvements-to-information_schema/

我还看到您在测试中使用的是utf8归类,但在生产中使用的是utf8mb4,并且再次使用不同的版本。 MySQL还对版本之间的排序规则进行了更正。有时他们在较旧的实现中存在错误,有时由某些标准委员会更新了归类的规范,并且MySQL进行了更改以保持与标准的兼容性。

许多软件包在主要版本之间进行了更改,您不应期望它们之间具有完美的兼容性。

您应确保使用技术堆栈中所有软件包的相同版本进行开发,测试和部署到生产中。数据库,语言,框架,Web服务器,缓存服务器,代理,负载平衡器,消息队列,库等都可能带来细微的变化,即使未记录在案。

如果您在一个版本上进行测试但在另一版本的技术堆栈上进行生产,则可能会因不兼容和错误而感到惊讶。实际上,您的测试无法保证您的代码可以在生产环境中正常工作!

答案 1 :(得分:0)

与服务器相比,本地整理是否有可能不同?例如。您是使用mysqld --character-set-server=utf8mb4或与生产服务器完全不同的本地启动的?

此外,底层操作系统的行为可能有所不同。我不记得看到一个特定的字符集对“ _”和“ s”进行了不同的排序,但是我想这是可能的。

答案 2 :(得分:0)

select  table_name, table_collation
    from  information_schema.tables
    order by  table_name COLLATE utf8_general_ci;

注意:

  • S <_ <s-因此,如果某人正在做UPPER()LOWER(),则顺序会更改。
  • utf8_bin和utf8_general_ci提供不同的答案;也许底层的DD表已更改?

(A,我无法深入探讨问题。)