Mysql 相同的查询,但通过生成不同的结果来排序
我正在运行两台MySQL服务器(生产和测试)。我通过MySQL Workbench在这两个平台上运行相同的查询,但结果的顺序不同。原因是什么 查询:Mysql 相同的查询,但通过生成不同的结果来排序,mysql,sql,sql-order-by,collation,Mysql,Sql,Sql Order By,Collation,我正在运行两台MySQL服务器(生产和测试)。我通过MySQL Workbench在这两个平台上运行相同的查询,但结果的顺序不同。原因是什么 查询: select table_name, table_collation from information_schema.tables where table_schema = 'orchestration' order by table_name asc` 与服务器相比,您的本地排序规则是否可能不同?例如,您是使用mysqld--charac
select table_name, table_collation
from information_schema.tables
where table_schema = 'orchestration'
order by table_name asc`
与服务器相比,您的本地排序规则是否可能不同?例如,您是使用mysqld--character set server=utf8mb4启动本地的,还是使用与生产服务器完全不同的东西 此外,底层操作系统的行为可能会有所不同。我不记得看到过一个特定的字符集对“u”和“s”进行了不同的排序,但我想这是可能的 测试版本为8.0.11;产量为5.6.33 MySQL 8.0完全改变了信息模式的内部实现。有关公告,请参见 我还看到您在测试中使用utf8排序规则,但在生产中使用utf8mb4,并且再次使用不同的版本。MySQL还修改了版本之间的排序规则。有时他们的旧实现有一个bug,有时一些标准委员会会更新排序规则的规范,MySQL会进行更改以保持与标准的兼容性 许多软件包在主要版本之间进行更改,您不应该期望它们之间具有完美的兼容性 您应该确保使用技术堆栈中所有软件包的相同版本进行开发、测试和部署到生产环境中。数据库、语言、框架、web服务器、缓存服务器、代理、负载平衡器、消息队列、库等都可能引入细微的变化,即使它们没有文档记录 如果您在一个版本上进行测试,但在不同版本的技术堆栈上部署到生产环境中,您可能会对不兼容和bug感到惊讶。实际上,您的测试并不能保证您的代码能够在生产环境中工作
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表已更改
(唉,我没能找到问题的根源。)MySQL的生产实例和测试实例运行的版本是否相同?Bill Karwin,测试版本是8.0.11;制作是5.6.33我在我的原始帖子中添加了一个截图;这有帮助吗?比尔·卡林上面的回答更准确;不同的版本会让你头疼不已(不仅仅是MySQL的问题!)。你能导出测试数据库,并在测试中加载到同一个版本吗?看来这是我必须走的方向!嗨,比尔。我想挖得更深,但遇到了障碍<代码>显示创建表信息\u架构。表原来是一个
视图
,但输出被截断。在哪里可以找到新8.0 DD表的模式?(为什么节目被截断了?)我尝试了一个8.0.14的沙盒实例,但它似乎没有被截断。我使用showcreatetable
或showcreateview
将其视为4205个字符。有趣的是,信息模式中的“视图”本身并不显示在信息模式中。视图。我在docker中使用了8.0.15。输出没有给出来自或连接的来告诉我底层表在哪里。你能告诉我它们是什么吗?有没有可能在它们上面做SHOW
?底层的表是mysql.tables
,mysql.schemata
,mysql.catalogs
,mysql.collations
,mysql.tablespaces
,mysql.table\u stats
。这些是内部数据字典对象,不可显示:错误3554(HY000):拒绝访问数据字典表“mysql.tables”。
这里有一个解释:谢谢,但是。等我有空的时候再去做。即使我能看到“隐藏”表,它也可能无法解释为什么\uu
的排序方式似乎不同。