2012-11-15 21 views
56

Wir verwenden UUID als Primärschlüssel für die Oracle-DB und versuchen, eine geeignete maximale Zeichenlänge für den VARCHAR zu ermitteln. Anscheinend sind das 36 Zeichen, aber wir haben bemerkt, dass UUIDs generiert wurden, die länger sind - bis zu 60 Zeichen lang. Kennt jemand eine geeignete maximale Zeichenlänge für UUID?UUID max. Zeichenlänge

+2

Da eine UUID eine 128-Bit-Nummer ist, bin ich wirklich neugierig, welche Codierung es in eine Zeichenfolge mit 60 Zeichen konvertieren würde. Sieht aus wie entweder extrem schlechte Kodierung oder ein anderes, unerforschtes Problem für mich. – fvu

+0

Was ist Ihr RDBMS? MS SQL hat einen dedizierten Typ für UUIDs und andere können einfach die Bytes speichern. Gibt es einen Grund, warum du diese als VARCHAR's speichern möchtest? –

Antwort

97

Section 3 of RFC4122 bietet die formale Definition von UUID-String-Darstellungen. Es sind 36 Zeichen - 32 Hex-Ziffern + 4 Gedankenstriche.

Klingt so, als müssten Sie herausfinden, woher die ungültigen 60-Zeichen-IDs kommen und 1) entscheiden, ob Sie sie akzeptieren möchten und 2) wie die maximale Länge dieser IDs auf der verwendeten API basieren könnte um sie zu generieren.

40

Dies ist die perfekte Art von Feld, um CHAR 36 zu definieren, übrigens nicht VARCHAR 36, da jeder Wert die exakt gleiche Länge hat. Außerdem benötigen Sie weniger Speicherplatz, da Sie nicht die Datenlänge für den Reichweitenwert speichern müssen, sondern nur den Wert.

+5

CHAR kann mehr Platz als VARCHAR verwenden, wenn Ihr Zeichensatz in der Spalte Multibyte ist (siehe unteren Teil auf http://Stackoverflow.com/a/59686/1691446) – David

+2

Ziemlich sicher, dass UUIDv4 nur den Latin-1-Zeichensatz verwendet von UTF-8, in welchem ​​Fall dies nicht betroffen sein wird. Überprüfen Sie auf jeden Fall, ob Sie einen anderen Zeichensatz verwenden. –

+0

UUID im String-Format kann nur diesen Zeichensatz (Regex) verwenden: '[0-9A-Fa-f-]', das sind 23 verschiedene Oktetts in ASCII. – cowbert