我正在运行两个MySQL服务器(生产和测试)。我通过MySQL Workbench在两个查询上运行相同的查询,但是结果的顺序不同。是什么原因?
查询:
select table_name, table_collation
from information_schema.tables
where table_schema = 'orchestration'
order by table_name asc`
答案 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()
,则顺序会更改。(A,我无法深入探讨问题。)