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

问题描述 投票:0回答:2

我的场景:

  • 新的 Cake (2.x) 项目,还没有数据库
  • 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

这个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 框架)一起使用)?

php mysql oracle cakephp-2.0 uuid
2个回答
4
投票

您可能已经知道这一点,但是您可以使用

String::uuid()
生成新记录的 id,并在表中添加
BINARY(16)
- 我不认为 cake 在 uuid 生成之后有任何自动魔法。


2
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.