7

我的场景:

  • 新的 Cake (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) 的成本高得离谱,并且在 1+ 百万、10+ 百万、100+ 百万行时变得愚蠢

博客文章声称BINARY(36)优于CHAR(36)

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

...但是蛋糕文档没有这么说...

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

4

2 回答 2

3

您可能已经知道这一点,但是您可以为新记录生成一个 id String::uuid(),并BINARY(36)在您的表中拥有 - 我认为 cake 在 uuid 生成之后没有任何自动魔法。

于 2012-11-30T04:18:07.733 回答
2

如果给 CakePHP 一个模型,其 id 字段的 SQL 类型为 Binary(36),那么每次创建新记录时,都会为 id 字段赋予一个新的 GUID 值。此行为自 1.3.15 版起就存在。

关于您的其他问题,由于 CHAR 涉及整理,我会选择二进制解决方案。

于 2013-11-04T15:09:04.207 回答