Saltar al contenido

Almacenar UUID v4 en MySQL

Solución:

Guárdelo como VARCHAR(36) si lo que busca es un ajuste exacto, o VARCHAR(255) que funcionará con el mismo costo de almacenamiento de todos modos. No hay razón para preocuparse por los bytes aquí.

Recordar VARCHAR los campos son Longitud variable, por lo que el costo de almacenamiento es proporcional a la cantidad de datos que realmente contienen, no a la cantidad de datos que podrían contener.

Almacenarlo como BINARY es extremadamente molesto, los valores no se pueden imprimir y pueden aparecer como basura al ejecutar consultas. Rara vez hay una razón para usar la representación binaria literal. Los valores legibles por humanos se pueden copiar y pegar y trabajar con ellos fácilmente.

Algunas otras plataformas, como Postgres, tienen una columna UUID adecuada que lo almacena internamente en un formato más compacto, pero lo muestra como legible por humanos, por lo que obtiene lo mejor de ambos enfoques.

Si siempre tiene un UUID para cada fila, puede almacenarlo como CHAR(36) y ahorre 1 byte por fila en VARCHAR(36).

uuid CHAR(36) CHARACTER SET ascii

A diferencia de CHAR, los valores VARCHAR se almacenan como un prefijo de longitud de 1 byte o 2 bytes más datos. El prefijo de longitud indica el número de bytes del valor. Una columna usa un byte de longitud si los valores no requieren más de 255 bytes, dos bytes de longitud si los valores pueden requerir más de 255 bytes. https://dev.mysql.com/doc/refman/5.7/en/char.html

Aunque ten cuidado con CHAR, siempre consumirá la longitud completa definida incluso si el campo se deja vacío. Además, asegúrese de utilizar ASCII para el juego de caracteres, como CHAR de lo contrario, planearía para el peor de los casos (es decir, 3 bytes por carácter en utf8, 4 en utf8mb4)

[…] MySQL debe reservar cuatro bytes para cada carácter en una columna de SET DE CARACTERES DE CARACTERES utf8mb4 porque esa es la longitud máxima posible. Por ejemplo, MySQL debe reservar 40 bytes para una columna CHAR (10) CHARACTER SET utf8mb4. https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

La pregunta trata sobre el almacenamiento de un UUID en MySQL.

Desde la versión 8.0 de mySQL puede usar binary(16) con conversión automática a través de UUID_TO_BIN/BIN_TO_UUID funciones: https://mysqlserverteam.com/mysql-8-0-uuid-support/

Tenga en cuenta que mySQL también tiene una forma rápida de generar UUID como clave principal:

INSERT INTO t VALUES (UUID_TO_BIN (UUID (), true))

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *