在CakePHP中使用UUID,建议使用什么数据类型



我的场景:

  • 新蛋糕(2.x)项目,尚未DB
  • MySQL集群,也许还有Oracle集群产品
  • 无需迁移/导入任何数据
  • 数据可以是:Users->HABTM->Groups->HABTM->Other Groups

我一直在研究如何在CakePHP中使用UUID,我发现了以下内容:

Cake本机支持UUID,但它假定CHAR(36):

http://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html

这个堆栈回答指出:

将UUID作为CHAR(36)的成本高得离谱愚蠢的100多万,1000多万,100多万排,在我的谦逊中体验

这篇博客文章声称BINARY(36)CHAR(36):更好

尽管CakePHP不支持16字节十六进制编码的UUIDBINARY(16)的密钥类型,它确实支持仍然比使用CHAR(36)要好,后者可以通过排序来减慢速度。

。。。但是蛋糕医生没有这么说。。。

我的问题是,考虑到CakePHP/MySQL(或CakePHP/Oracle),CHAR(36)是这里唯一合理的选择,还是有更好、更有效的方法将UUID与CakePHP(或任何其他PHP框架)一起使用?

你可能已经知道了,但你可以用String::uuid()为新记录生成一个id,并在你的表中有BINARY(36)——我认为cake在生成uuid之后没有任何自动魔力。

如果CakePHP的模型有一个SQL类型为Binary(36)的id字段,那么每次创建新记录时,id字段都会得到一个新的GUID值。这种行为自1.3.15版本以来就一直存在。

关于您的另一个问题,由于CHAR涉及排序,我会选择二进制解决方案。

最新更新