sql >> Databáze >  >> RDS >> Mysql

Vkládání a výběr UUID jako binárních (16)

Takže jako reakce na komentáře. Správný způsob, jak uložit 36znakový UUID jako binární(16), je provést vložení způsobem jako:

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

UNHEX protože UUID je již hexadecimální hodnota. Ořízneme (REPLACE ) pomlčky v příkazu, aby se délka snížila na 32 znaků (našich 16 bajtů reprezentovaných jako HEX ). Samozřejmě to můžete udělat kdykoli před uložením, takže se s tím nemusí zacházet databáze.

UUID můžete získat takto:

SELECT HEX(UUID) FROM sometable;

Pro případ, že by někdo narazil na toto vlákno a nebyl si jistý, jak to funguje.

A nezapomeňte:Pokud vybíráte řádek pomocí UUID, použijte UNHEX() na stavu :

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

nebo doslovný zápis (jak zmínil Alexis Wilke):

SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;

A NE HEX() na sloupci:

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

Poslední řešení, i když funguje, vyžaduje, aby MySQL HEX es všechny UUID, než může určit, které řádky se shodují. Je to velmi neefektivní.

Edit:Pokud používáte MySQL 8, měli byste se podívat na funkce UUID, jak je uvedeno v odpovědi SlyDave. Tato odpověď je stále správná, ale neoptimalizuje indexy UUID, které lze provést nativně pomocí těchto funkcí. Pokud používáte

  1. Provádění sady SQL dotazů pomocí dávkového souboru?

  2. Jaký je nejlepší způsob implementace vyhledávání podřetězců v SQL?

  3. 6 způsobů, jak přidat měsíc k datu v MariaDB

  4. Seřadí se 'Select' vždy podle primárního klíče?