Mysql 相同的查询,但通过生成不同的结果来排序

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

我正在运行两台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启动本地的,还是使用与生产服务器完全不同的东西

此外,底层操作系统的行为可能会有所不同。我不记得看到过一个特定的字符集对“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
的排序方式似乎不同。