Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstawianie i wybieranie identyfikatorów UUID jako binarnych(16)

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Maksymalna długość tekstu typu MySQL

  2. BŁĄD 1064 (42000) w MySQL

  3. Scal wiersze o tym samym identyfikatorze w tablicę

  4. Jak ustawić parametry połączenia za pomocą Entity Framework

  5. BŁĄD 1064 (42000):Wystąpił błąd w składni SQL; Chcesz skonfigurować hasło jako root będąc użytkownikiem