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ć?
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.
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;
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/
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