¿Cuál es el tamaño de la columna int(11)
en mysql en bytes?
¿Y el valor máximo que se puede almacenar en estas columnas?
mysql
antes de mi llegada. Thx
¿Cuál es el tamaño de la columna int(11)
en mysql en bytes?
¿Y el valor máximo que se puede almacenar en estas columnas?
mysql
antes de mi llegada. Thx
Respuestas:
Un INT
siempre será de 4 bytes sin importar la longitud especificada.
TINYINT
= 1 byte (8 bits)SMALLINT
= 2 bytes (16 bits)MEDIUMINT
= 3 bytes (24 bits)INT
= 4 bytes (32 bits)BIGINT
= 8 bytes (64 bits).La longitud solo especifica cuántos caracteres rellenar al seleccionar datos con el cliente de línea de comando mysql. 12345 almacenado como int(3)
todavía se mostrará como 12345, pero si se almacenó como int(10)
todavía se mostrará como 12345, pero tendría la opción de rellenar los primeros cinco dígitos. Por ejemplo, si agregó ZEROFILL
, se mostrará como 0000012345.
... y el valor máximo será 2147483647 (Firmado) o 4294967295 (Sin firmar)
5001
se mostrará 5001
incluso si el campo se define como INT(3)
. Vea la respuesta de @priyabagus a continuación y aquí .
INT ( x ) hará la diferencia solo en términos de visualización , es decir, para mostrar el número en x dígitos, y no restringido a 11. Lo empareja usando ZEROFILL
, lo que antepondrá los ceros hasta que coincida con su longitud.
Entonces, para cualquier número de x enINT(x)
si el valor almacenado tiene menos dígitos que x , ZEROFILL
antepondrá ceros.
INT (5) ZEROFILL con el valor almacenado de 32 mostrará 00032
INT (5) con el valor almacenado de 32 mostrará 32
INT con el valor almacenado de 32 mostrará 32
Si el valor almacenado tiene más dígitos que x , se mostrará tal como está.
INT (3) ZEROFILL con el valor almacenado de 250000 mostrará 250000
INT (3) con el valor almacenado de 250000 mostrará 250000
INT con el valor almacenado de 250000 mostrará 250000
El valor real almacenado en la base de datos no se ve afectado, el tamaño sigue siendo el mismo y cualquier cálculo se comportará normalmente.
Esto también se aplica a BIGINT, MEDIUMINT, SMALLINT y TINYINT.
ZEROFILL
.
Según aquí , int(11)
ocupará 4 bytes de espacio, que son 32 bits de espacio con 2^(31) = 2147483648
valor máximo y -2147483648
valor mínimo. Un bit es para firmar.
Como otros han dicho, los valores mínimos / máximos que la columna puede almacenar y la cantidad de almacenamiento que toma en bytes solo se define por el tipo, no por la longitud.
Muchas de estas respuestas dicen que la (11)
parte solo afecta el ancho de la pantalla, lo que no es exactamente cierto, sino principalmente.
Una definición int(2)
con ningún zerofill especificada hará lo siguiente:
100
100
cuando la salida (no 0
o 00
)Lo único que (2)
hará es si también se especifica zerofill :
1
se mostrará 01
.La mejor manera de ver todos los matices es ejecutar:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`int1` int(10) NOT NULL,
`int2` int(3) NOT NULL,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
que dará como resultado:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
Esta respuesta se prueba con MySQL 5.7.12 para Linux y puede o no variar para otras implementaciones.
¿Cuál es el tamaño de la columna de int (11) en mysql en bytes?
(11)
- este atributo de int
tipo de datos no tiene nada que ver con el tamaño de la columna. Es solo el ancho de visualización del tipo de datos entero. Desde 11.1.4.5. Atributos de tipo numérico :
MySQL admite una extensión para especificar opcionalmente el ancho de visualización de los tipos de datos enteros entre paréntesis después de la palabra clave base para el tipo. Por ejemplo, INT (4) especifica un INT con un ancho de visualización de cuatro dígitos.
Aquí
se puede encontrar una buena explicación para
resumir: el número N en int (N) a menudo se confunde con el tamaño máximo permitido para la columna, como lo hace en el caso de varchar (N).
Pero este no es el caso con los tipos de datos Integer: el número N entre paréntesis no es el tamaño máximo de la columna, sino simplemente un parámetro para decirle a MySQL en qué ancho mostrar la columna cuando se visualizan los datos de la tabla a través de MySQL consola (cuando está utilizando el atributo ZEROFILL).
El número entre paréntesis le dirá a MySQL cuántos ceros para rellenar los enteros entrantes. Por ejemplo: si está usando ZEROFILL en una columna que se establece en INT (5) y se inserta el número 78, MySQL rellenará ese valor con ceros hasta que el número satisfaga el número entre paréntesis. es decir, 78 se convertirá en 00078 y 127 se convertirá en 00127. Para resumir: el número entre paréntesis se utiliza para mostrar.
En cierto modo, el número entre paréntesis es algo inútil a menos que esté utilizando el atributo ZEROFILL.
Por lo tanto, el tamaño para el int permanecería igual, es decir, -2147483648 a 2147483648 para firmado y 0 a 4294967295 para no firmado(~ 2.15 billones y 4.2 billones, que es una de las razones por las cuales los desarrolladores no se dan cuenta de la historia detrás del Número N entre paréntesis, ya que apenas afecta a la base de datos a menos que contenga más de 2 billones de filas), y en términos de bytes Sería de 4 bytes .
Para obtener más información sobre el tamaño / rango de los tipos enteros, consulte el manual de MySQL
Aunque es poco probable que se vea esta respuesta, creo que vale la pena hacer la siguiente aclaración:
Un poco de detalle,
el ancho de la pantalla, aparentemente, tiene la intención de proporcionar algunos metadatos sobre cuántos ceros mostrar en un número relleno con cero.
En realidad, NO limita la longitud de un número devuelto por una consulta si ese número supera el ancho de visualización especificado.
Para saber qué longitud / ancho se permite realmente para un tipo de datos entero en MySQL, consulte la lista y el enlace: ( tipos: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Dicho esto, puede esperar que el ancho de la pantalla no afecte los resultados de una consulta estándar, a menos que las columnas se especifiquen como columnas ZEROFILL
O
en el caso de que los datos se envíen a una aplicación y esa aplicación esté recopilando ancho de pantalla a utilizar para algún otro tipo de relleno.
Referencia principal: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
, así que ... sí, eso es una tontería. Solo hace algo con zerofill.
En MySQL, el número entero int(11)
tiene un tamaño de 4 bytes, lo que equivale a 32 bits.
El valor firmado es: - 2^(32-1) to 0 to 2^(32-1)-1
= -2147483648 to 0 to 2147483647
Los valores sin signo son: 0 to 2^32-1
= 0 to 4294967295
de acuerdo con este libro :
MySQL le permite especificar un "ancho" para los tipos enteros, como INT (11). Esto no tiene sentido para la mayoría de las aplicaciones: no restringe el rango legal de valores, sino que simplemente especifica el número de caracteres que las herramientas interactivas de MySQL reservarán para fines de visualización. Para fines de almacenamiento y computacionales, INT (1) es idéntico a INT (20).