10

MySQL テーブルの主キーとして使用したい UUID 文字列があります。UUID は 32 文字の 16 進数文字列です (「-」文字が削除された後)。データベースの主キーとして数値列 (int) を使用する方がよいため、これを整数に変換したいと考えていますが、それを処理する最善の方法がわかりません。

  1. 文字列のサイズ (つまり、uuid='a822ff2bff02461db45ddcd10a2de0c2') のため、これを複数の「部分文字列」に分割する必要がありますか?
  2. 現在、32 ビット アーキテクチャで PHP を実行しているため、PHP_INT_MAX サイズ (最大 0xFFFFFFFF) のため、PHP 内での変換は機能しません。そして、それは MySQL についても同じ制限になると思います。
  3. これを修正するために複数の主キーを使用するという考えは好きではありません。好ましい方法ではありませんが、文字列表現を使用したいと思います。

私はこれについてすべて間違っていると考えている可能性があり、ドキュメントを読むことに反対しているのではありません。

4

3 に答える 3

32

ほとんどの場合、UUID/GUID を として保存するのが最善BINARY(16)です。これらの関連する StackOverflow の質問を参照してください。

変換は、PHP の代わりに MySQL で行うことができます (そしておそらくそうすべきです)。そのため、32 ビットの PHP クライアントを使用しているか、64 ビットを使用しているかは問題ではありません (しゃれた意図:P)

于 2013-04-20T17:22:50.990 に答える
1

整数ではなく文字列型を使用してください。それが問題を解決する場合にのみ、より良いです。

検索速度が本当に気になる場合は、合成 (自動インクリメント) 主キーを使用してください。UUID列に一意の制約を配置し、それを1回だけ使用して、後で結合などに使用される合成キーを検索できます.

于 2013-04-20T17:04:45.853 に答える
0

ストレージエンジンにも依存します。TokuDB は、これらすべての問題を処理する必要があります。

于 2015-03-02T15:28:16.050 に答える