提问人:Robert S 提问时间:3/4/2019 最后编辑:GMBRobert S 更新时间:3/7/2019 访问量:657
相同的查询,但 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”进行不同排序的特定字符集,但我想这是可能的。
评论
测试版本为 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 服务器、缓存服务器、代理、负载平衡器、消息队列、库等都可能引入细微的变化,即使它们没有记录在案。
如果您在一个版本上进行测试,但在不同版本的技术堆栈上部署到生产环境,则您可能会对不兼容和错误感到惊讶。实际上,您的测试并不能保证您的代码将在生产环境中工作!
评论
SHOW CREATE TABLE information_schema.TABLES
VIEW
SHOW CREATE TABLE
SHOW CREATE VIEW
information_schema.views
FROM
JOIN
SHOW
mysql.tables
mysql.schemata
mysql.catalogs
mysql.collations
mysql.tablespaces
mysql.table_stats
ERROR 3554 (HY000): Access to data dictionary table 'mysql.tables' is rejected.
_
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 表发生了变化?
(唉,我无法弄清楚问题的根源。
评论