我的场景:
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指出:
将 UUID 转换为 CHAR(36) 的成本高得离谱,并且变成 愚蠢的是 1+ 百万、10+ 百万、100+ 数百万行,以我的谦卑 经验
这篇博客文章声称
BINARY(36)
比CHAR(36)
更好:
虽然 CakePHP 不支持 16 字节十六进制编码的 UUID BINARY(16) 的密钥类型,它确实支持 BINARY(36),但仍然 比使用 CHAR(36) 更好,可以通过排序规则减慢速度。
...但是蛋糕文档没有这么说...
我的问题是,考虑到 CakePHP/MySQL(或 CakePHP/Oracle),CHAR(36) 是这里唯一合理的选择,还是有更好、更有效的方法将 UUID 与 CakePHP(或任何其他 PHP 框架)一起使用)?
您可能已经知道这一点,但是您可以使用
String::uuid()
生成新记录的 id,并在表中添加 BINARY(16)
- 我不认为 cake 在 uuid 生成之后有任何自动魔法。
如果给 CakePHP 一个模型,其 id 字段的 SQL 类型为 Binary(36),那么每次创建新记录时,id 字段都会被赋予一个新的 GUID 值。从 1.3.15 版本开始,此行为就出现了。
关于您的其他问题,由于 CHAR 涉及排序规则,我会选择二进制解决方案。