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