¿Hay alguna diferencia en usar INT(1) vs TINYINT (1) en MySQL?


Asumo que INT(1) es exactamente lo mismo que TINYINT(1) pero realmente no tengo idea. Siempre que he tenido valores que solo pueden ser un único entero(por ejemplo, un valor 0-9), siempre he utilizado INT (1) para decir que es un entero y solo será un carácter, lo que supongo que significa que solo podría ser un valor 0 a 9 (por favor, explíqueme esto si me equivoco). Siempre he ignorado los otros tipos de INT que puede emitir el número como. No soy un experto en MySQL y tiendo a evita las cosas más complicadas que puedes hacer con él.

Así que mi pregunta, ¿hay alguna diferencia entre los varios tipos enteros INT, TINYINT, SMALLINT, MEDIUMINT, y BIGINT si se define una longitud de 1 para cada tipo;? Si no, ¿debo usarlos de todos modos (puedo ver usándolos para un significado más semántico, TINYINT siendo más específico que solo INT)? Si es así, ¿podría fácilmente (y/o debería) simplemente ir a través de mi base de datos y cambiar todos mis campos INT(1) a campos TINYINT(1)?

Author: animuson, 2011-11-08

3 answers

El número entre paréntesis para los tipos de columna enteros es el "ancho de visualización". Esto no afecta a los requisitos de almacenamiento, ya que están predefinidos.

Lectura adicional

 36
Author: Phil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-09 23:00:37

¡Aquí lo entenderás de una mejor manera!

tinyint: 1 byte, -128 to +127 / 0 to 255 (unsigned)
smallint: 2 bytes, -32,768 to +32,767 / 0 to 65,535 (unsigned)
mediumint: 3 bytes, -8,388,608 to 8,388,607 / 0 to 16,777,215 (unsigned)
int/integer: 4 bytes, -2,147,483,648 to +2,147,483,647 / 0 to 4,294,967,295 (unsigned)
bigint: 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 / 0 to 18,446,744,073,709,551,615 (unsigned)
 43
Author: Cody,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-30 19:56:05

Como explicó la respuesta aceptada :

El número entre paréntesis indica el número de caracteres para mostrar ese campo, no el tamaño de almacenamiento del campo.

Pero si desea saber el tamaño de almacenamiento, debe verificar los documentos fuente de MySQL.

Source: MySQL Docs: Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT

TINYINT: 1 byte, -128 a 127 firmado, 0 a 255 sin signo

SMALLINT : 2 bytes, -32768 a 32767 firmado, 0 a 65535 sin firmar

MEDIUMINT : 3 bytes, -8388608 a 8388607 firmado, 0 a 16777215 sin firmar

INT : 4 bytes, -2147483648 a 2147483647 firmado, 0 a 4294967295 sin firmar

BIGINT : 8 bytes, -2^63 a 2^63-1 firmado, 0 a 2^64-1 sin firmar

 0
Author: HoldOffHunger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-02 16:23:08