Ce face UUID_TO_BIN()
Un UUID salvat ca text ocupă 36 de caractere; în binar ocupă doar 16 octeți, iar indexul devine mai mic și mai rapid. UUID_TO_BIN() face conversia, iar BIN_TO_UUID() face drumul invers.
Cu al doilea argument 1, funcția mută la început partea de timp care se schimbă cel mai rar. UUID-urile generate unul după altul devin astfel aproape ordonate, ceea ce ajută mult la inserări în cheia primară InnoDB. Dacă folosești 1 la salvare, trebuie să folosești 1 și la BIN_TO_UUID().
Parametri
| Parametru | Descriere |
|---|---|
uuid_text |
UUID-ul ca text (cu sau fără cratime și acolade). |
schimba_ordinea |
Opțional. 0 (implicit) păstrează ordinea; 1 mută partea de timp la început. |
Ce returnează
Un VARBINARY(16); NULL pentru NULL; eroare pentru un text care nu e UUID.
Exemple
Exemplul 1: Cu și fără schimbarea ordinii
Rezultatul binar este afișat cu HEX().
SET @uuid = '6ccd780c-baba-1026-9564-5b8c656024db';
SELECT HEX(UUID_TO_BIN(@uuid)) AS ordine_normala,
HEX(UUID_TO_BIN(@uuid, 1)) AS timp_la_inceput;
Rezultat
+----------------------------------+----------------------------------+
| ordine_normala | timp_la_inceput |
+----------------------------------+----------------------------------+
| 6CCD780CBABA102695645B8C656024DB | 1026BABA6CCD780C95645B8C656024DB |
+----------------------------------+----------------------------------+
Exemplul 2: Cheie primară BINARY(16)
CREATE TABLE comenzi (
id BINARY(16) PRIMARY KEY,
client VARCHAR(30)
);
INSERT INTO comenzi VALUES
(UUID_TO_BIN('6ccd780c-baba-1026-9564-5b8c656024db', 1), 'Ana'),
(UUID_TO_BIN('7d2e891d-baba-1026-9564-5b8c656024db', 1), 'Dan');
SELECT BIN_TO_UUID(id, 1) AS id, client, LENGTH(id) AS octeti
FROM comenzi
WHERE id = UUID_TO_BIN('7d2e891d-baba-1026-9564-5b8c656024db', 1);
Rezultat
+--------------------------------------+--------+--------+
| id | client | octeti |
+--------------------------------------+--------+--------+
| 7d2e891d-baba-1026-9564-5b8c656024db | Dan | 16 |
+--------------------------------------+--------+--------+
Greșeli frecvente
- Salvezi cu
UUID_TO_BIN(x, 1)și citești cuBIN_TO_UUID(x). Primești alt UUID; folosește același al doilea argument în ambele sensuri. - Compari coloana binară direct cu textul:
WHERE id = '6ccd780c-...'. Nu găsește nimic; convertește textul cuUUID_TO_BIN().
Comenzi înrudite
BIN_TO_UUID(): Transformă un UUID binar (16 octeți) înapoi în text de 36 de caractere.UUID(): Generează un identificator unic universal (UUID versiunea 1), un text de 36 de caractere.IS_UUID(): Verifică dacă un text este un UUID valid: 1 (da), 0 (nu) sau NULL.