Pergunta

Esta é a melhor maneira que eu poderia chegar a converter um MySQL GUID / UUID gerado pelo UUID () a um binário (16):

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

E, em seguida, armazená-lo em um binário (16)

Existem quaisquer implicações de fazê-lo desta maneira que eu deveria saber de?

Foi útil?

Solução

Não são muitas implicações. Ele vai abrandar as consultas um pouco, mas dificilmente você vai notar.

UNIQUEIDENTIFIER é armazenado como 16-byte binary internamente de qualquer maneira.

Se você estiver indo para carregar o binário em um cliente e analisá-lo lá, observe o bit order, ele pode ter outra representação de cadeia do que o NEWID() inicial.

função Oracle de SYS_GUID() está propenso a este problema, convertendo-a em uma corda dá resultados diferentes no cliente e no servidor.

Outras dicas

A partir do MySQL 8.0 e acima, você pode usar UUID_TO_BIN :

UUID_TO_BIN (string_uuid) , UUID_TO_BIN (string_uuid, swap_flag)

converte uma cadeia UUID para um UUID binário e retorna o resultado. (O IS_UUID () Descrição da função lista as permitido formatos UUID de cordas.) O retorno binário UUID é um valor 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 Demonstração

eu hash-lo em um número inteiro de 8 bytes e armazenar o número inteiro utilizando uma alta eficiência de sentido único algoritmo hash de baixo-colisão como MurmurHash64A. Este utiliza muito menos espaço e podem ser indexados e / ou dividido por diante. Há um projeto SourceForge que inclui funções memcached para MySQL ( http: // forja. mysql.com/projects/project.php?id=250 ) que pode incluir MurmurHash64A, desde memcached usa-lo, mas eu não sei. Ou olhar para esta implementação da FNV para o MySQL: http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top