在CakePHP中使用UUID,推荐使用什么数据类型?

时间:2012-09-28 19:51:58

标签: php mysql oracle cakephp-2.0 uuid

我的情景:

  • New Cake(2.x)Project,No DB Yet
  • MySQL Clustered,也许是Oracle Clustered Prod
  • 无需迁移/导入数据
  • 数据可能如下所示:Users - > HABTM - > Groups - > HABTM - > Other Groups

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

Cake对UUID有本机支持,但它假定为CHAR(36)

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

Stack Answer指出:

  

以CHAR(36)作为UUID的成本非常高,并且成为了   在我的谦逊中,愚蠢的1亿多,10多万,100多万行   经验

Blog Post声明BINARY(36)优于CHAR(36)

  

尽管CakePHP不支持16字节十六进制编码的UUID   BINARY(16)的关键类型,它确实支持BINARY(36),它仍然是   比使用CHAR(36)更好,可以通过整理来减慢速度。

...但是Cake Docs并没有这么说......

我的问题是,鉴于CakePHP / MySQL(或CakePHP / Oracle),CHAR(36)是这里唯一合理的选择,或者是否有更好,更有效的方式将UUID与CakePHP(或任何其他PHP框架)一起使用那件事)?

2 个答案:

答案 0 :(得分:3)

您可能已经知道这一点,但是您可以为新记录生成String::uuid()的ID,并在表中添加BINARY(36) - 我认为蛋糕在uuid代之后没有任何自动化。

答案 1 :(得分:2)

如果给CakePHP一个带有id字段的模型,其SQL类型是Binary(36),那么每次创建新记录时,id字段都将被赋予一个新的GUID值。从版本1.3.15开始,此行为就在这里。

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