Pregunta

Esta es la mejor manera de que pudiera llegar a convertir una MySQL GUID / UUID generado por UUID () a un binario (16):

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

Y luego almacenarla en un sistema binario (16)

¿Hay implicaciones de hacerlo de esta manera que debería saber de?

¿Fue útil?

Solución

No muchas implicaciones. Que se ralentizará las consultas un poco, pero casi no lo notará.

UNIQUEIDENTIFIER se almacena como 16-byte binary internamente de todos modos.

Si va a cargar el binario en un cliente y analizar allí, tenga en cuenta el bit order, puede tener otra representación de cadena de la NEWID() inicial.

Función Oracle de SYS_GUID() es propenso a este problema, convirtiéndola en una cadena da resultados diferentes en el cliente y en el servidor.

Otros consejos

A partir de MySQL 8.0 y superior se puede utilizar UUID_TO_BIN :

  

UUID_TO_BIN (string_uuid) , UUID_TO_BIN (string_uuid, swap_flag)

     

Convierte un UUID cadena a un UUID binario y devuelve el resultado. (La descripción de la función IS_UUID () se enumeran los formatos UUID cadena permitidos.) El UUID binaria de retorno es un (16) VARBINARY valor.

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 Demostración

Me hachís en un entero de 8 bytes y almacenar el número entero ya bajo número de colisiones de alta eficiencia de una sola vía algoritmo de hash como MurmurHash64A. Esto utiliza mucho menos espacio y pueden ser indexados y / o dividida en. Hay un proyecto SourceForge que incluye funciones MemCached para MySQL ( http: // forja. mysql.com/projects/project.php?id=250 ) que podría incluir MurmurHash64A, ya que memcached lo usa, pero no sé. O mirar a esta implementación de la FNV para MySQL: http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top