Przechowywanie MySQL GUID/UUIDs

Jest to najlepszy sposób, jaki mogłem wymyślić, aby przekonwertować GUID / uuid MySQL wygenerowany przez UUID() na binarny(16):

UNHEX(REPLACE(UUID(),'-',''))

A następnie zapisanie go w pliku binarnym(16)

Czy są jakieś konsekwencje robienia tego w ten sposób, o których powinienem wiedzieć?

Author: thr, 2009-02-13

3 answers

Niewiele implikacji. To trochę spowolni zapytania, ale prawie tego nie zauważysz.

UNIQUEIDENTIFIER jest przechowywany wewnętrznie jako 16-byte binary.

Jeśli zamierzasz załadować plik binarny do klienta i tam go przetworzyć, zwróć uwagę na bit order, może on mieć inną reprezentację łańcuchową niż początkowa NEWID().

Oracle'Funkcja s SYS_GUID() jest podatna na ten problem, konwersja jej na ciąg znaków daje różne wyniki na kliencie i na serwerze.

 8
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-23 11:25:46

Z MySQL 8.0 i wyżej możesz użyć UUID_TO_BIN :

UUID_TO_BIN (string_uuid) , uuid_to_bin (string_uuid, swap_flag)

Konwertuje łańcuch UUID na binarny uuid i zwraca wynik. (Opis funkcji IS_UUID () zawiera listę dozwolonych formatów znaków uuid.) Zwracanym binarnym UUID jest wartość VARBINARY (16).

CREATE TABLE t (id binary(16) PRIMARY KEY);

INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));

SELECT *, BIN_TO_UUID(id) FROM t;

DB-Fiddle.com Demo

 1
Author: Lukasz Szozda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-21 07:39:00

Chciałbym hash go do 8-bajtowej liczby całkowitej i zapisać liczbę całkowitą przy użyciu niskiej kolizji wysokiej wydajności jednokierunkowy algorytm hash jak MurmurHash64A. to zużywa dużo mniej miejsca i może być indeksowane i/lub partycjonowane na. Istnieje projekt SourceForge, który zawiera funkcje MemCached dla mySQL ( http://forge.mysql.com/projects/project.php?id=250 ), które mogą zawierać MurmurHash64A, ponieważ memchached go używa, ale nie wiem. Lub spójrz na tę implementację FNV dla mySQL: http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/

 -5
Author: bretlowery,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-07 20:56:08