Mysql
 sql >> Database >  >> RDS >> Mysql

Inserimento e selezione di UUID come binari(16)

Quindi, in risposta ai commenti. Il modo corretto per memorizzare un UUID a 36 caratteri come binary(16) consiste nell'eseguire l'inserimento in un modo come:

INSERT INTO sometable (UUID) VALUES
       (UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")))

UNHEX perché un UUID è già un valore esadecimale. Tagliamo (REPLACE ) i trattini nell'istruzione per ridurre la lunghezza a 32 caratteri (i nostri 16 byte rappresentati come HEX ). Puoi farlo in qualsiasi momento prima di archiviarlo, ovviamente, quindi non deve essere gestito dal database.

Puoi recuperare l'UUID in questo modo:

SELECT HEX(UUID) FROM sometable;

Nel caso in cui qualcuno si imbattesse in questo thread e non fosse sicuro di come funziona.

E ricorda:se selezioni una riga utilizzando l'UUID, usa UNHEX() a condizione :

SELECT * FROM sometable WHERE UUID = UNHEX('3f06af63a93c11e4979700505690773f');

o notazione letterale (come menzionato da Alexis Wilke):

SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;

E NON HEX() sulla colonna:

SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';

L'ultima soluzione, mentre funziona, richiede che MySQL HEX es tutti gli UUID prima che possa determinare quali righe corrispondono. È molto inefficiente.

Modifica:se stai usando MySQL 8 dovresti dare un'occhiata alle funzioni UUID come menzionato nella risposta di SlyDave. Questa risposta è ancora corretta, ma non ottimizza gli indici UUID che possono essere eseguiti in modo nativo utilizzando tali funzioni. Se utilizzi