2011-11-08 15 views
35

Supongo que INT (1) es exactamente lo mismo que TINYINT (1), pero realmente no tengo ni idea. Cada vez que tengo valores que solo pueden ser un entero (por ejemplo, un valor de 0-9), siempre he usado INT (1) para decir que es un número entero y que solo tendrá un carácter, lo que supongo que significa que solo podría ser un valor de 0 a 9 (por favor explícame esto si estoy equivocado). Siempre he ignorado los otros tipos de INT con los que puedes convertir el número. No soy conocedor de MySQL y tiendo a evitar las cosas más complicadas que puedes hacer con él.¿Existe alguna diferencia en el uso de INT (1) frente a TININT (1) en MySQL?

Así que mi pregunta, ¿hay alguna diferencia entre los distintos tipos de enteros INT, TINYINT, SMALLINT, MEDIUMINT y BIGINT si define una longitud de 1 para cada tipo? En caso negativo, ¿debería utilizarlos de todos modos (puedo ver que los usa para obtener un significado más semántico, TINYINT es más específico que solo INT)? De ser así, ¿podría fácilmente (y/o debería) acceder a mi base de datos y cambiar todos mis campos INT (1) a campos TINYINT (1)?

+0

Creo que 'TINYINT (1)' es un entero de 1 bit, no de 1 dígito. No sé sobre 'INT (1)' pero si está almacenando correctamente para los números del 0 al 9, sigue usándolo :) Pero siempre pensé que era 1 bit también. – Ryan

+0

@minitech 'TINYINT' es 1 byte, no 1 bit – Phil

+0

@Phil: Oops: P Así que cambio mi comentario a:" Ambos son de 1 byte ". – Ryan

Respuesta

35

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

Otras lecturas

+3

Entonces, incluso si defino INT (1) para permitir solo un carácter, aún usará hasta 4 bytes pase lo que pase? – animuson

+1

@animuson 'INT (1)' no ** no ** permite solo un caracter. Establece el ancho de visualización para esa columna en los conjuntos de resultados. Lea el último enlace de arriba, lo explica bastante bien – Phil

+1

Oh, ya veo. Supongo que debería haber continuado en el enlace anterior 2. o.o Además, ¿dañaría algo si simplemente cambiara un campo de INT a TINYINT si todos los valores son 0 y 1 o debería dejarlo solo? – animuson

41

aquí vas a entender en mejor forma!

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) 
+3

¡Gracias, esto es super práctico! – Braunson

+2

Esta debería ser la respuesta elegida :)! – Hussard

+0

si está utilizando phpmyadmin, simplemente desplace el cursor sobre el menú desplegable de selección al seleccionar el tipo y se mostrarán todos estos detalles automáticamente. :) –

Cuestiones relacionadas