Necesito almacenar enteros sin signo de 128 bits en MySQL y me preguntaba cuál es el mejor tipo de datos para almacenar números tan grandes.
En este momento, estoy usando binary(16)
pero eso implica muchas funciones de conversión pack(/huge number in hex .../)
.
¿Existe un mejor tipo de datos para almacenar un entero sin signo de 128 bits?
Respuestas:
No sé cuál es la mejor manera de almacenarlo necesariamente, pero hay al menos una mejor opción que usar un
varchar(39)
(ovarchar(40)
si lo necesitaras firmado); en su lugar use adecimal(39,0)
. De los documentos de mysql :Está almacenado empaquetado, por lo que ocupará menos espacio que el varchar ( 18 bytes, si estoy haciendo mis cálculos correctamente ), y espero que puedas hacer cálculos matemáticos directamente, pero he Nunca intenté con un número tan grande para ver qué pasa.
fuente
Me encontré haciendo esta pregunta y de todas las publicaciones que leí nunca encontré ninguna comparación de rendimiento. Así que aquí está mi intento.
He creado las siguientes tablas, pobladas con 2.000.000 de direcciones IP aleatorias de 100 redes aleatorias.
Luego SELECCIONO todas las direcciones IP para cada red y registro el tiempo de respuesta. El tiempo de respuesta promedio en la tabla de dos dígitos es de aproximadamente 1 segundo, mientras que en la tabla binaria es de aproximadamente una centésima de segundo.
Aquí están las consultas.
Tiempos de respuesta promedio:
fuente
Creo que la única otra opción es almacenarlo en un
varchar(39)
campo.fuente