Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/06/2011, 06:55
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Tipo de dato int(). Dudas.

Tu confusión es muy habitual, casi todos hacen la misma pregunta tarde o temprano.
Muchos creen que ese valor entre paréntesis representa la longitud de cifras del campo. No es así.
Vamos al manual:
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 replaza por ceros. Por ejemplo, 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.
Simplificando:
1) El rango de las cifras está dado por el tipo de columna, no por ese valor numérico.
2) Ese valor se usa en consultas en consola, para hacer que el número se alinee correctamente a la derecha, pero sólo importa si el número tiene menos cifras que el que indica en ese valor. Si la cifra es mayor, no tiene importancia.
3) Indicar un número inferior al máximo representable puede generar graves errores en ciertos casos, como generación de vistas, o tablas creadas sobre consultas, ya que MySQL interpreta que esa es la longitud real del número y puede generar errores de tipo de dato.
4) El sistema pone diferentes valores según sea o no UNSIGNED, porque los numeros con signo necesitan un espacio adicional para aquellos numeros que sean negativos, para el "-".

En esencia: Deja que el sistema le ponga la cifra que quiera, de todos modos no le pone ni le saca nada. Lo que no debes hacer es poner una más corta de lo que el sistema ponga, ya que eventualmente te puede crear errores no detectables.
Hay un post anterior mio sobre el tema con un ejemplo bastante claro del caso (http://www.forosdelweb.com/f86/difer...9/#post3681559).

Nota: Sólo en los DECIMAL, FLOAT o REAL, ese valor numérico significa longitud de la cifra.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)