UUIDの最大文字長


115

Oracleデータベースの主キーとしてUUIDを使用し、VARCHARの適切な最大文字長を決定しようとしています。どうやらこれは36文字ですが、これよりも長いUUIDが生成されていることに気づきました-最大60文字です。誰かがUUIDの適切な最大文字長を知っていますか?


2
UUIDは128ビットの数値なので、どのコーディングでそれを60文字の文字列に変換するかを知りたいと思います。非常に貧弱なエンコーディング、または私にとって他のいくつかの未解決の問題のように見えます。
FVU

1
あなたのRDBMSは何ですか?MS SQLにはUUID専用のタイプがあり、他のタイプは単にバイトを格納できます。これらをVARCHARs として保存する理由はありますか?

@ user565869それらをバイトとして格納することは、あらゆる種類の手動検査にとってひどいものです
Enerccio

回答:


171

RFC4122のセクション3は、UUID文字列表現の正式な定義を提供します。36文字です(32桁の16進数+ 4つのダッシュ)。

無効な60文字のIDがどこから来ているのかを把握し、1)それらを受け入れるかどうか、および2)それらのIDの最大長が、それらを生成するために使用されるAPIに基づいているかを判断する必要があるようです。


64

ちなみに、これはVARCHAR 36ではなく、CHAR 36として定義するのに最適な種類のフィールドです。各値の長さがまったく同じになるためです。また、各値のデータ長を保存する必要はなく、値だけを保存するので、使用する保存容量が少なくなります。


9
列の文字セットがマルチバイトの場合、CHARはVARCHARよりも多くのスペースを使用する可能性があります(stackoverflow.com/a/59686/1691446の下部を参照)
David

7
UUIDv4がUTF-8のLatin-1文字セットのみを使用していることを確認してください。この場合、これは影響を受けません。ただし、別の文字セットを使用しているかどうかを必ず確認してください。
Aaron_H

2
文字列形式のUUIDは[0-9A-Fa-f-]、ASCIIで23の異なるオクテットである次の文字セット(正規表現)のみを使用できます。
カウベルト

RFC 4122によると、UUIDは16オクテットまたは128ビットです。それより多くのストレージを使用している場合は、それらを非効率的にエンコードしています。たとえば、ダッシュをエンコードする必要はありません。彼らは情報を追加しません。
トレントン

4
@Trentonストレージの効率と使いやすさの間にはトレードオフがあります。ストレージ効率を最大化するためにUUIDをBINARY(16)として保存できますが、DBを見ている人には正規表現が表示されず、プログラミング言語には正規/文字列表現からUUIDオブジェクトを作成する手段しかない場合があります。まったくUUIDオブジェクト型を持っています。UUID等、バイナリ形式の面倒との比較を行う、ファイル内の文字列形式で格納されるかもしれない
TaylanUB

7

最近のほとんどのデータベースには、データベースの操作を容易にするためにネイティブのUUIDタイプがあります。そうでない場合は、128ビットの数値なので、BINARY(16)を使用できます。たとえば、トラブルシューティングなどで頻繁にテキスト形式が必要な場合は、計算列を追加して、バイナリ列から自動的に生成します。(はるかに大きい)テキストフォームを保存する十分な理由はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.