Хранение MySQL GUID/UUID
Это лучший способ, с помощью которого я мог бы преобразовать GUID/UUID MySQL, сгенерированный UUID() в двоичный файл (16):
UNHEX(REPLACE(UUID(),'-',''))
И затем сохраняя его в BINARY (16)
Есть ли какие-либо последствия для этого, о которых я должен знать?
Ответы
Ответ 1
Не так много последствий. Это немного замедлит запросы, но вы вряд ли заметите это.
UNIQUEIDENTIFIER
всегда сохраняется как 16-byte binary
.
Если вы собираетесь загрузить двоичный файл в клиент и проанализируйте его там, отметьте bit order
, он может иметь другое строковое представление, чем начальное NEWID()
.
Oracle
SYS_GUID()
функция подвержена этой проблеме, преобразование ее в строку дает разные результаты на клиенте и на сервере.
Ответ 2
Я бы поставил его в 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/