相同的查询,但 ORDER BY 产生不同的结果
Same Query But ORDER BY Producing Different Results
我运行正在使用两台MySQL 服务器(生产和测试)。我通过 MySQL Workbench 运行 对两者进行了相同的查询,但结果的顺序不同。这是什么原因?
查询:
select table_name, table_collation
from information_schema.tables
where table_schema = 'orchestration'
order by table_name asc`
与服务器相比,您的排序规则是否可能在本地不同?例如。您使用 mysqld --character-set-server=utf8mb4
在本地启动,还是与生产服务器完全不同?
此外,底层操作系统的行为可能有所不同。我不记得看到过以不同方式对“_”和 's' 进行排序的特定字符集,但我想这是可能的。
test version is 8.0.11; production is 5.6.33
MySQL 8.0 完全改变了 INFORMATION_SCHEMA 的内部实现。有关公告,请参阅 https://mysqlserverteam.com/mysql-8-0-improvements-to-information_schema/。
我还看到您在测试中使用的是 utf8 排序规则,但在生产中使用的是 utf8mb4,并且再次使用了不同的版本。 MySQL 还对版本之间的排序规则进行了更正。有时他们的旧实现有错误,有时排序规范由一些标准委员会更新,并且 MySQL 更改以保持与标准的兼容性。
许多软件包在主要版本之间进行更改,您不应该期望它们之间的完美兼容性。
您应该确保使用技术堆栈中所有软件包的相同版本来开发、测试和部署到生产环境。数据库、语言、框架、Web 服务器、缓存服务器、代理、负载平衡器、消息队列、库等都可以引入细微的变化,即使它们没有记录。
如果您在一个版本上进行测试但在不同版本的技术堆栈上部署到生产环境,您可能会遇到不兼容性和错误。实际上,您的测试并不能保证您的代码可以在生产环境中运行!
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 table 改变了?
(唉,没能追根究底。)
我运行正在使用两台MySQL 服务器(生产和测试)。我通过 MySQL Workbench 运行 对两者进行了相同的查询,但结果的顺序不同。这是什么原因?
查询:
select table_name, table_collation
from information_schema.tables
where table_schema = 'orchestration'
order by table_name asc`
与服务器相比,您的排序规则是否可能在本地不同?例如。您使用 mysqld --character-set-server=utf8mb4
在本地启动,还是与生产服务器完全不同?
此外,底层操作系统的行为可能有所不同。我不记得看到过以不同方式对“_”和 's' 进行排序的特定字符集,但我想这是可能的。
test version is 8.0.11; production is 5.6.33
MySQL 8.0 完全改变了 INFORMATION_SCHEMA 的内部实现。有关公告,请参阅 https://mysqlserverteam.com/mysql-8-0-improvements-to-information_schema/。
我还看到您在测试中使用的是 utf8 排序规则,但在生产中使用的是 utf8mb4,并且再次使用了不同的版本。 MySQL 还对版本之间的排序规则进行了更正。有时他们的旧实现有错误,有时排序规范由一些标准委员会更新,并且 MySQL 更改以保持与标准的兼容性。
许多软件包在主要版本之间进行更改,您不应该期望它们之间的完美兼容性。
您应该确保使用技术堆栈中所有软件包的相同版本来开发、测试和部署到生产环境。数据库、语言、框架、Web 服务器、缓存服务器、代理、负载平衡器、消息队列、库等都可以引入细微的变化,即使它们没有记录。
如果您在一个版本上进行测试但在不同版本的技术堆栈上部署到生产环境,您可能会遇到不兼容性和错误。实际上,您的测试并不能保证您的代码可以在生产环境中运行!
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 table 改变了?
(唉,没能追根究底。)