Tak więc w odpowiedzi na komentarze. Prawidłowym sposobem przechowywania 36-znakowego UUID jako pliku binarnego(16) jest wykonanie wstawienia w następujący sposób:
INSERT INTO sometable (UUID) VALUES
(UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")))
UNHEX
ponieważ UUID jest już wartością szesnastkową. Przycinamy (REPLACE
) myślniki w instrukcji, aby skrócić długość do 32 znaków (nasze 16 bajtów reprezentowanych jako HEX
). Oczywiście możesz to zrobić w dowolnym momencie przed zapisaniem, więc nie musi to być obsługiwane przez bazę danych.
Możesz pobrać UUID w ten sposób:
SELECT HEX(UUID) FROM sometable;
Na wypadek, gdyby ktoś natknął się na ten wątek i nie był pewien, jak to działa.
I pamiętaj:jeśli wybierasz wiersz za pomocą identyfikatora UUID, użyj UNHEX()
pod warunkiem :
SELECT * FROM sometable WHERE UUID = UNHEX('3f06af63a93c11e4979700505690773f');
lub notacja dosłowna (jak wspomniał Alexis Wilke):
SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;
I NIE HEX()
w kolumnie:
SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';
Ostatnie rozwiązanie, gdy działa, wymaga MySQL HEX
Zawiera wszystkie identyfikatory UUID, zanim będzie mógł określić, które wiersze pasują. To bardzo nieefektywne.
Edycja:Jeśli używasz MySQL 8, powinieneś rzucić okiem na funkcje UUID, jak wspomniano w odpowiedzi SlyDave'a. Ta odpowiedź jest nadal poprawna, ale nie optymalizuje indeksów UUID, co można zrobić natywnie za pomocą tych funkcji. Jeśli korzystasz z