MySQL 与 Percona XtraDB 集群中 uuid_to_bin() 的输出不一致

Inconsistent Outputs from uuid_to_bin() in MySQL vs. Percona XtraDB Cluster

提问人:Elbo Shindi Pangestu 提问时间:11/17/2023 最后编辑:ShadowElbo Shindi Pangestu 更新时间:11/18/2023 访问量:33

问:

我目前正在使用 MySQL 和 Percona XtraDB Cluster,并且在这两个系统的行为和功能方面遇到了奇怪的差异。uuid_to_bin()bin_to_uuid()

  • 我正在使用 MySQL 版本 8.1.0(用于本地)和 Percona XtraDB 集群版本 5.7.39-42-57-log(用于生产)。
  • 我的工作涉及在两种环境中处理 UUID。

例如,查询在 MySQL 和 Percona XtraDB Cluster 中生成不同的输出。这使得在不同环境中进行调试变得更加困难。select uuid_to_bin('01ae07f7-8513-11ee-98f4-0242ac110005')

为什么此查询在 MySQL 和 Percona XtraDB 集群中产生不同的结果?

mysql uuid percona-xtradb-cluster

评论

0赞 Tim Roberts 11/17/2023
他们生产什么?如果你正在做跨平台的东西,你可能想把它们作为字符串来处理。
0赞 Elbo Shindi Pangestu 11/17/2023
我无法复制结果(可能是因为它是二进制类型),我可以附上屏幕截图,不是吗?
0赞 Elbo Shindi Pangestu 11/17/2023
该列是二进制的;当我想调试它时,我使用 将其转换为字符串,但它在生产和 localhost 中产生不同的结果。bin_to_uuid()
3赞 Bill Karwin 11/17/2023
据我所知,在 Percona XtraDB Cluster 5.7 中没有作为内置函数实现。我正在查看源代码:github.com/percona/percona-xtradb-cluster/blob/5.7/sql/...并且这两个函数的代码不存在,而它存在于 8.0 分支的代码文件中。我想知道是否有人将这些函数实现为存储函数。你能运行这个查询吗?uuid_to_bin()bin_to_uuid()SELECT ROUTINE_SCHEMA, ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME='uuid_to_bin';
2赞 Bill Karwin 11/17/2023
您确实应该在开发中使用与在生产环境中部署相同的软件版本。您很可能会遇到其他类似的不兼容问题。花时间开发依赖于生产环境中不支持的功能的软件并不有趣。

答:

0赞 Bill Karwin 11/18/2023 #1

从上面的评论来看,似乎有人在 Percona XtraDB Cluster 5.7 实例上创建了一个名为 的函数,但它们的实现与 MySQL 8.0 中添加的同名内置函数略有不兼容。CREATE FUNCTIONuuid_to_bin

这会导致混淆,因为在开发实例中使用该函数获得的结果与在生产环境中使用的结果不同。该函数以相同的名称存在,但它是不同的函数。

在开发和测试中使用与在生产中使用的相同版本的数据库软件非常重要。每个版本都包含许多更改、新功能,甚至功能删除。其中一些更改是无害的,但其他更改会导致不兼容。

您不想浪费时间使用较新版本中存在的功能,然后部署到生产中的旧版本,并惊讶地发现该功能未在旧版本中实现。这很令人沮丧,更重要的是,它可能会导致问题,因为您必须撤消一些您已经认为已经完成的代码。你的雇主不会对浪费的时间感到满意。

因此,您应该尽可能使用在生产环境中运行的相同版本的软件进行开发和测试。