Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Diferencias entre int y tinyint

Estas en el tema de Diferencias entre int y tinyint en el foro de Mysql en Foros del Web. Hola, existe alguna diferencia al declarar un campo como int(1) y tinyint(1) por ejemplo? Saludos!...
  #1 (permalink)  
Antiguo 22/12/2010, 16:54
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 12 años, 5 meses
Puntos: 4
Diferencias entre int y tinyint

Hola, existe alguna diferencia al declarar un campo como int(1) y tinyint(1) por ejemplo?

Saludos!
  #2 (permalink)  
Antiguo 22/12/2010, 17:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 7 meses
Puntos: 2658
Respuesta: Diferencias entre int y tinyint

Este es un tema recurrente. Yendo al manual (MySQL 5.0 Reference Manual :: 11 Tipos de columna :: 11.2 Tipos numéricos) podrás ver que:
Cita:
MySQL soporta otra extensión para especificar de forma óptima el ancho a mostrar de un tipo entero en paréntesis después de la palabra clave para el tipo (por ejemplo, INT(4)). Esta especificación opcional del ancho de muestra se usa para alinear a la izquierda la muestra de los valores con ancho menor que el ancho especificado para la columna.

El ancho de muestra no restringe el rango de valores que pueden almacenarse en la columna, sino el número de dígitos que se muestran para valores con ancho que exceda el especificado para la columna.

Cuando se usa en conjunción con el atributo de extensión opcional ZEROFILL, el relleno por defecto de espacios se reemplaza por ceros. Por ejmplo, para una columna declarada como INT(5) ZEROFILL, un valor de 4 se muestra como 00004. Tenga en cuenta que si almacena valores mayores que el ancho de muestra en una columna entera, puede tener problemas cuando MySQL genera tablas temporales para algunos joins complicados, ya que en estos casos MySQL cree que los datos encajan en el ancho original de la columna
(los resaltados son míos)

En definitiva: El rango de datos está determinado por el tipo de columna y no por la cifra expresada en el paréntesis, que en realidad no representa más que lo que dice el manual.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/12/2010, 17:51
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 12 años, 5 meses
Puntos: 4
Respuesta: Diferencias entre int y tinyint

entonces la diferencia entre int(1) y tinyint(1) es que int permitirá almacenar X valores pero solo mostrará uno?
  #4 (permalink)  
Antiguo 22/12/2010, 19:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 7 meses
Puntos: 2658
Respuesta: Diferencias entre int y tinyint

No, ese número es absolutamente irrelevante. En los hechos no no produce nada, salvo que el número sea menor a la cantidad de dígitos que expresa; en ese caso, y sólo en modo consola, genera un ajuste de texto a la izquierda del texto. Pero si el número tiene una cantidad de dígitos mayor, simplemente muestra el número entero, sin sacar ni poner nada.

En otras palabras, si lo quieres poner, ponlo, pero no hará nada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 22/12/2010, 20:21
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 12 años, 5 meses
Puntos: 4
Respuesta: Diferencias entre int y tinyint

Entonces es lo mismo a efectos de eficacia de ejecucion de las consultas?
  #6 (permalink)  
Antiguo 23/12/2010, 05:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 14 años, 7 meses
Puntos: 2658
Respuesta: Diferencias entre int y tinyint

Es absolutamente irrelevante.

Vamos a ver si se entiende bien: Ese numero se utiliza cuando en una consulta hecha en consola debe representarse el valor. El sistema debe, en ese caso y como es un número (los cuales, recordarás, se escriben de derecha a izquierda y no como un texto), el sistema necesita saber cuántos espacios le deja a la izquierda antes de empezar a representar el número en cuestión.
Por default, a un valor entero se le indica un número equivalente a la longitud total de la máxima cifra más uno; este último espacio es para el signo "-" en caso de necesitarse.
Asi pues, si el numero es un INT(11), pero la cifra es 123456, quedan cinco espacios que deben agregarse a la izquierda, antes de representarlo:
Código MySQL:
Ver original
  1. -----------
  2. |12345678901|
  3. -----------
  4. |     123456|
  5. -----------
En el caso de un valor numérico negativo, digamos -1234567, no se requieren 4 espacios sino 3, ya que el "-" usa uno de ellos:


Código MySQL:
Ver original
  1. -----------
  2. |12345678901|
  3. -----------
  4. |   -1234567|
  5. -----------

¿Qué pasa si la cifra es más larga que el valor del INT(x)? Pues nada, simplemente se representa la cifra:
Supongamos un INT(4)
Código MySQL:
Ver original
  1. -----------
  2. |  1234|
  3. -----------
  4. |123456|
  5. -----------
O sea, nada. EL numero se representa completo y lo que empieza a sumar espacios es el título del encabezado, para que la columna quede bien dibujada. Pero no afecta en nada más.

¿Queda suficientemente claro?

Esto sólo afecta el modo consola, y no las interfases gráficas, que manejan la representación por sí mismas, por lo que si estás programando algo en PHP, .Net, Java o lo que sea, simplemente ignora ese detalle.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 23/12/2010, 17:50
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 12 años, 5 meses
Puntos: 4
Respuesta: Diferencias entre int y tinyint

gracias por la detenida explicación gnzsoloyo, entendido ;)

Etiquetas: diferencias, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:33.