¿Cuál es el tamaño de la columna de int (11) en mysql en bytes?


488

¿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?



1
@cellepo uno es genérico sql el otro es específico para mysql (además este tiene muchas más vistas). Si quieres ir a una cacería de tontos y hacer que los cierre rápidamente en un voto, visita el chat de SOBotics y hazme un ping. Pero el que cierra tiene que ser marcado mysqlantes de mi llegada. Thx
Drew

66
Hola chicos. Posiblemente esté duplicado, pero es más fácil de buscar. La mayoría de la gente busca de esta manera usando int (11). y está resolviendo las preguntas de otras personas. puede verificar su número de vistas comparativo con el otro. y el usuario encontrará una respuesta más detallada aquí.
Gaurav

Respuestas:


685

Un INTsiempre 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)


111
entonces, ¿qué significa 11 en int (11) aquí.
Gaurav

73
Columna INT (4), el entero 1 se mostrará como 0001 SOLO si la columna también se especifica como zerofill. De lo contrario, solo se mostrará como el número 1, sin dígitos adicionales. @Gaurav: no mezcle cómo mysql muestra los datos y cómo los almacena, esas son dos cosas diferentes. Lo que ves no es lo que realmente podría ser.
Michael JV

13
@ Michael Wow, realmente interesante. Entonces, si crea una columna INT (3) y almacena un valor 5001, almacenará 5001 pero solo mostrará 1. No lo sabía.
andrewtweber

16
@andrewtweber: 5001se mostrará 5001incluso si el campo se define como INT(3). Vea la respuesta de @priyabagus a continuación y aquí .
go2null

10
Si no proporciona una longitud para campos enteros, MySQL establecerá un valor predeterminado (tinyint 4, smallint 6, mediumint 9, int 11, bigint 20) Vale la pena señalar que estas longitudes predeterminadas son suficientes para mostrar cualquier número que se puede almacenar en este campo (por ejemplo: el valor máximo de smallint es 2 ^ 16 = 65536, 5 dígitos) A menos que tenga una muy buena razón para hacerlo, le recomendaría que deje los tamaños predeterminados para evitar sorpresas.
Thibault Witzig

167

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 , ZEROFILLantepondrá 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.


49
Entonces, ¿la longitud no hace absolutamente nada a menos que use zerofill?
developerbmw

29
@developerbmw - Correcto. La longitud no hace absolutamente nada a menos que la use ZEROFILL.
Rick James

ZEROFILL es esencialmente el modo de compatibilidad de mainframe.
Henk Poley

114

Según aquí , int(11)ocupará 4 bytes de espacio, que son 32 bits de espacio con 2^(31) = 2147483648valor máximo y -2147483648valor mínimo. Un bit es para firmar.


1
Tu ejemplo tiene 9 nueves. ¿Puedes confirmar que tu ejemplo es correcto? Si es así, ¿por qué dice 10 cuando hay 9 nueves? ¿Es el número de dígitos más uno más el carácter del signo?
Homer6

55
No, el número máximo es 4294967295 si no está firmado int, es decir, 2 ^ 32. El número entre paréntesis no afecta el tipo de almacenamiento. Si necesita más de 2 ^ 32, debe ir a bigint.
Kieran Tully

77
O más bien, (2 ^ 32) -1.
Kieran Tully

2
+ Kieran tiene razón. El número máximo es diferente al de la respuesta. Ver aquí
daviewales

38

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:

  • todavía acepta un valor de 100
  • todavía muestra un valor de 100cuando la salida (no 0o 00)
  • el ancho de visualización será el ancho del valor más grande que se emite desde la consulta de selección.

Lo único que (2)hará es si también se especifica zerofill :

  • un valor de 1se mostrará 01.
  • Al mostrar valores, la columna siempre tendrá un ancho del valor máximo posible que la columna podría tomar, que es 10 dígitos para un entero, en lugar del ancho mínimo requerido para mostrar el valor más grande que la columna debe mostrar en esa consulta de selección específica , que podría ser mucho más pequeño.
  • La columna aún puede tomar y mostrar un valor que excede la longitud, pero estos valores no tendrán como prefijo 0s.

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.


55
"Observe cómo la columna int1 tiene un ancho de visualización mucho más pequeño que zerofill2 a pesar de que la longitud es mayor" ... Ehm, eso es solo porque el nombre de la columna 'zerofill2' tiene 9 caracteres de largo frente a 'int1' siendo 4.
neokio

2
... sí, entonces la longitud claramente no tiene efecto, incluso en el ancho de la pantalla cuando zerofill no está habilitado. De lo contrario, int1 sería mucho más ancho con un ancho de 10 caracteres.
Programador

2
Una buena explicación con un ejemplo sólido. Respuesta mucho mejor que la aceptada. Gracias @Programster.
Corin

Nit menor: Como señala neokio, no puedo observar de esta consulta las consecuencias exactas de "int (3)" con relleno cero. Acorte el nombre de la columna a "zf2" para aclarar el comportamiento. Específicamente, ya sea verdadero o falso [en una versión de base de datos dada] que "(con zerofill) Al mostrar valores, la columna siempre tendrá un ancho del valor máximo posible que la columna podría tomar, que son 10 dígitos para un número entero",
ToolmakerSteve

1
Para aclarar el comentario de neokio y mi comentario menor: La oración "Observe cómo la columna int1 tiene un ancho de visualización mucho más pequeño que zerofill2 a pesar de que la longitud es mayor". debe ser eliminado de la respuesta. Esa es una consecuencia del número de caracteres en la palabra de encabezado "zerofill2": no tiene nada que ver con probar los anchos de visualización. Es mejor darle a esa columna un nombre más corto, por ejemplo, "zf2". Entonces tendríamos una tabla donde "int1, int2 y zf2 tienen exactamente el mismo ancho, aunque int2 y zf2 especifiquen un ancho pequeño (3)".
ToolmakerSteve

32

¿Cuál es el tamaño de la columna de int (11) en mysql en bytes?

(11)- este atributo de inttipo 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.


19

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


¿Por qué el número de filas entra en juego aquí?
Old Geezer

@OldGeezer: de acuerdo, "número de filas" es irrelevante para la mayoría de las columnas. Solo es relevante para la columna de clave principal (id) de incremento automático.
ToolmakerSteve

10

Aunque es poco probable que se vea esta respuesta, creo que vale la pena hacer la siguiente aclaración:

  • el (n) detrás de un tipo de datos entero en MySQL especifica el ancho de la pantalla
  • el ancho de la pantalla NO limita la longitud del número devuelto por una consulta
  • el ancho de la pantalla SÍ limita el número de ceros llenos para una columna llena de cero, por lo que el número total coincide con el ancho de la pantalla (siempre que el número real no exceda el ancho de la pantalla, en cuyo caso el número se muestra como está)
  • el ancho de la pantalla también es una herramienta útil para que los desarrolladores sepan a qué longitud se debe rellenar el valor

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


Gracias por proporcionar la respuesta adecuada. Estaba intentando desde la línea de comandos de MySQL, y no pude hacer que cortara ningún dígito con pequeños n, así que ... sí, eso es una tontería. Solo hace algo con zerofill.
mpen

@mpen me alegro de poder ayudar, esto estaba relacionado con algo que estaba intentando y pensé que podría poner más detalles al respecto aquí que podrían ser útiles para otra persona.
MER

9

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


0

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).


-4

Creo que el valor máximo de int (11) es 4294967295


2
Es 2147483647 porque tiene signo.
d3bit

-9

4294967295 es la respuesta, porque int (11) muestra un máximo de 11 dígitos IMO

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.