ぐるっとぐりっど

日曜プログラマがいろいろ試してみたことを、後の自分のためにまとめておく場所

CakePHP2.3で主キーにUUIDを使用する(sqlite3)

以前も利用したことあるはずなのに、すっかり忘れていたので自分用メモ

CakePHP2.0以降では、主キー(デフォルト命名規則では各テーブルのidカラム)に連番(mysqlでいうauto_increment、postgresqlでいうSERIAL的な感じ)だけではなくて、UUIDを使うこともできます。

UUIDは「(8文字英数字)-(4文字英数字)-(4文字英数字)-(4文字英数字)-(12文字英数字)」の36文字からフォーマットで表現されるもので、Linux内部などではデバイスを識別するのに使われているかと思います。

連番整数とUUIDとどっちがパフォーマンスやらその他諸々でより優れているのかあまりわかっていないのですが、少なくともほかのIDが推測されにくい分UUIDの方が優れていると思っています。

CakePHPでは、DB設計時に、主キー(idカラム)のデータ型を

CHAR(36)

もしくは

VARCHAR(36)

にすることで、自動で主キーの値をUUIDにしてくれます。すごい!

sqlite使っていたので、TEXT型でいっかーと思ってやってたら、UUIDどころかidカラムがnullとなってしまったので、自分用メモでした。

ちなみに以前はVARCHAR(36)しか対応してなかったけど、途中からCHAR(36)でもUUIDを使うように改善されたみたいですね。

https://github.com/cakephp/cakephp/commit/f531e7f24b1fbff1d7c8c265eb295e1aa506d888


ちなみに、cookbook2.xにも、uuidを使いたければchar(36)としましょう!とばっちり書いてありました。ドキュメントはよく読みましょう。