2012-11-15 17 views
56

Si utilizza UUID come chiave primaria per il DB oracle esterno e si tenta di determinare la lunghezza massima del carattere appropriata per VARCHAR. Apparentemente si tratta di 36 caratteri, ma abbiamo notato che gli UUID generati sono più lunghi di questo - fino a 60 caratteri di lunghezza. Qualcuno conosce una lunghezza max char char adatta per UUID ??UUID lunghezza carattere max

+2

Poiché un UUID è un numero di 128 bit, sono davvero curioso di vedere quale codice lo converte in una stringa da 60 caratteri. Sembra sia una codifica estremamente scadente, sia qualche altro problema non realizzato per me. – fvu

+0

Qual è il tuo RDBMS? MS SQL ha un tipo dedicato per UUID, mentre altri possono semplicemente archiviare i byte. C'è qualche ragione per cui vorresti archiviarli come 'VARCHAR's? –

risposta

97

Section 3 of RFC4122 fornisce la definizione formale delle rappresentazioni di stringa UUID. Ha 36 caratteri - 32 cifre esadecimali + 4 trattini.

Sembra che tu debba capire da dove arrivano gli ID 60-char non validi e decidere 1) se vuoi accettarli e 2) quale lunghezza massima di tali ID potrebbe essere basata su qualsiasi API utilizzata per generarli.

40

Questo è il tipo di campo perfetto da definire come CHAR 36, a proposito, non VARCHAR 36, poiché ogni valore avrà la stessa lunghezza esatta. E utilizzerai meno spazio di archiviazione, dal momento che non è necessario memorizzare la lunghezza dei dati per il valore di copertura, solo il valore.

+5

CHAR può utilizzare più spazio di VARCHAR se il set di caratteri nella colonna è multi-byte (vedere la parte inferiore su http://stackoverflow.com/a/59686/1691446) – David

+2

Certo che UUIDv4 utilizza solo il set di caratteri latin-1 di UTF-8, nel qual caso questo non sarà interessato. Sicuramente controlla se stai usando un diverso set di caratteri. –

+0

UUID in formato stringa può usare solo questo set di caratteri (regex): '[0-9A-Fa-f-]', che è di 23 ottetti distinti in ASCII. – cowbert