相同的查询但订单生成不同的结果

问题描述 投票:2回答:3

我正在运行两个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

mysql sql sql-order-by collation
3个回答
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服务器,缓存服务器,代理,负载平衡器,消息队列,库等都可以引入细微的变化,即使它们没有记录。

如果您在一个版本上进行测试,但在不同版本的技术堆栈上部署到生产环境,则可能会因不兼容性和错误而感到惊讶。实际上,您的测试并不能保证您的代码在生产中有效!


0
投票

与服务器相比,您的校对可能在本地不同吗?例如。你用mysqld --character-set-server=utf8mb4推出了本地产品,还是与生产服务器完全不同的产品?

此外,底层操作系统可能表现不同。我不记得看到一个特定的字符集以不同的方式排序'_'和's',但我想这是可能的。


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表改变了?

(唉,我无法解决问题的根源。)

© www.soinside.com 2019 - 2024. All rights reserved.