Lunghezza massima caratteri UUID


115

Stiamo utilizzando l'UUID come chiave primaria per il DB Oracle e stiamo cercando di determinare una lunghezza massima di caratteri appropriata per il 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 di caratteri massima adatta per l'UUID?


2
Poiché un UUID è un numero di 128 bit, sono davvero curioso di vedere quale codifica lo convertirà in una stringa di 60 caratteri. A me sembra una codifica estremamente scadente o qualche altro problema non realizzato.
fvu

1
Qual è il tuo RDBMS? MS SQL ha un tipo dedicato per gli UUID e altri possono semplicemente memorizzare i byte. C'è qualche motivo per cui vorresti salvarli come VARCHARs?

@ user565869 memorizzarli come byte sono terribili per qualsiasi tipo di ispezione manuale
Enerccio

Risposte:


171

La sezione 3 di RFC4122 fornisce la definizione formale delle rappresentazioni di stringa UUID. Sono 36 caratteri (32 cifre esadecimali + 4 trattini).

Sembra che tu debba capire da dove provengono gli ID di 60 caratteri non validi e decidere 1) se vuoi accettarli e 2) quale potrebbe essere la lunghezza massima di quegli ID in base all'API utilizzata per generarli.


64

Questo è il tipo di campo perfetto da definire come CHAR 36, tra l'altro, non VARCHAR 36, poiché ogni valore avrà la stessa identica lunghezza. E utilizzerai meno spazio di archiviazione, poiché non è necessario memorizzare la lunghezza dei dati per ciascun valore, ma solo il valore.


9
CHAR può utilizzare più spazio di VARCHAR se il set di caratteri nella colonna è multibyte (vedere la parte inferiore su stackoverflow.com/a/59686/1691446 )
David

7
Abbastanza sicuro UUIDv4 sta usando solo il set di caratteri latin-1 di UTF-8, nel qual caso questo non sarà influenzato. Sicuramente controlla se stai usando un set di caratteri diverso però.
Aaron_H

2
L'UUID in formato stringa può utilizzare solo questo set di caratteri (regex):, [0-9A-Fa-f-]ovvero 23 ottetti distinti in ASCII.
cowbert

RFC 4122 afferma che gli UUID sono 16 ottetti o 128 bit. Se utilizzi più spazio di archiviazione, li codifichi in modo inefficiente. Non c'è bisogno di codificare i trattini, per esempio. Non aggiungono informazioni.
Trenton

4
@Trenton c'è un compromesso tra efficienza di archiviazione e facilità d'uso. È possibile memorizzare gli UUID come BINARY (16) per la massima efficienza di archiviazione, ma qualcuno che guarda oltre il DB non vedrebbe la rappresentazione canonica e un linguaggio di programmazione può avere solo un mezzo per creare un oggetto UUID dalla rappresentazione canonica / stringa, oppure no avere un tipo di oggetto UUID a tutti; l'UUID potrebbe essere memorizzato in forma di stringa in un file, rendendo il confronto con il formato binario ingombrante, ecc.
TaylanUB

7

Oggigiorno la maggior parte dei database ha un tipo UUID nativo per semplificare il lavoro. Se il tuo non lo fa, sono solo numeri a 128 bit, quindi puoi usare BINARY (16) e se hai bisogno del formato di testo frequentemente, ad esempio per la risoluzione dei problemi, aggiungi una colonna calcolata per generarla automaticamente dalla colonna binaria . Non ci sono buone ragioni per memorizzare il modulo di testo (molto più grande).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.