Dus als reactie op opmerkingen. De juiste manier om een 36-tekens UUID als binair (16) op te slaan, is door het invoegen op een manier als volgt uit te voeren:
INSERT INTO sometable (UUID) VALUES
(UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")))
UNHEX
omdat een UUID al een hexed-waarde is. We trimmen (REPLACE
) de streepjes in de instructie om de lengte terug te brengen tot 32 tekens (onze 16 bytes weergegeven als HEX
). U kunt dit natuurlijk op elk moment doen voordat u het opslaat, zodat het niet door de database hoeft te worden afgehandeld.
U kunt de UUID als volgt ophalen:
SELECT HEX(UUID) FROM sometable;
Voor het geval iemand deze thread tegenkomt en niet zeker weet hoe dit werkt.
En onthoud:als je een rij selecteert met de UUID, gebruik dan UNHEX()
op voorwaarde :
SELECT * FROM sometable WHERE UUID = UNHEX('3f06af63a93c11e4979700505690773f');
of letterlijke notatie (zoals vermeld door Alexis Wilke):
SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;
En NIET HEX()
op de kolom:
SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';
De laatste oplossing, hoewel het werkt, vereist dat MySQL HEX
es alle UUID's voordat het kan bepalen welke rijen overeenkomen. Het is erg inefficiënt.
Bewerken:als je MySQL 8 gebruikt, moet je eens kijken naar de UUID-functies zoals vermeld in het antwoord van SlyDave. Dit antwoord is nog steeds correct, maar het optimaliseert niet de UUID-indexen die native kunnen worden gedaan met behulp van die functies. Als u zich op