Хранение MySQL GUID / UUID - PullRequest
       38

Хранение MySQL GUID / UUID

30 голосов
/ 13 февраля 2009

Это лучший способ, с помощью которого я мог бы преобразовать GUID / UUID MySQL, сгенерированный UUID (), в двоичный файл (16):

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

И затем сохранить его в двоичном виде (16)

Есть ли какие-либо последствия, если я сделаю это таким образом, о котором я должен знать?

Ответы [ 3 ]

8 голосов
/ 13 февраля 2009

Не так много последствий. Это немного замедлит запросы, но вы вряд ли это заметите.

UNIQUEIDENTIFIER сохраняется как 16-byte binary для внутреннего использования.

Если вы собираетесь загрузить двоичный файл в клиент и проанализировать его там, обратите внимание на bit order, он может иметь строковое представление, отличное от исходного NEWID().

Oracle Функция SYS_GUID() подвержена этой проблеме, ее преобразование в строку дает разные результаты на клиенте и на сервере.

2 голосов
/ 21 апреля 2018

Начиная с MySQL 8.0 и выше, вы можете использовать UUID_TO_BIN :

UUID_TO_BIN (string_uuid) , UUID_TO_BIN (string_uuid, swap_flag)

Преобразует строковый UUID в двоичный UUID и возвращает результат. (В описании функции IS_UUID () перечислены допустимые строковые форматы UUID.) Возвращаемый двоичный UUID является значением 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

0 голосов
/ 08 июня 2010

Я бы хэшировал его в 8-байтовое целое и сохранял его, используя высокоэффективный однонаправленный хэш-алгоритм с низким уровнем коллизий, такой как MurmurHash64A. Это занимает намного меньше места и может быть проиндексировано и / или разделено на. Существует проект SourceForge, который включает функции MemCached для mySQL (http://forge.mysql.com/projects/project.php?id=250), которые могут включать MurmurHash64A, поскольку Memchached использует его, но я не знаю. Или посмотрите на эту реализацию FNV для mySQL: http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/

...