Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/06/2011, 08:00
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.

Rango es precisamente eso: los límites inferior y superior de un valor dado.
El rango de representación de un número se expresa desde cero si es sin signo, y desde su menor a su mayor números posiblles, si es con signo. El por qué un tipo de dato puede o no tener sigo es un problema que se estudia formalmente en las carreras universitarias. Es largo y exige muchas explicaciones.
La idea básica es que sólo puedes representar en una computadora valores cuyos rangos máximos sean potencias de dos, y por extensión, sólo valores que sean a la vez contenidos en un sistema de representación de 8 bits, por "palabra".
Eso hace que como sólo tienes 8 bits para un número mínimo, la mitad se usen para representar positivos y la otra mitad negativos. Como necesitas el cero, eventualmente uno de los dos rangos pierde un número para el cero. Por lo general es el de los positivos, por lo cual un TINYINT SIGNED va de -128 a + 127.
¿Se ve la idea?
Ahora bien, si usas un byte (8 bits) pero sin signo, la cosa cambia: va de 0 a 255 (256 combinaciones posibles, pero una es el cero).

Ahora bien, Como no puede en la realidad existir un ID cero, y jamás existirán IDs negativos, no tiene sentido crear un ID con una columna con signo: Perderías una mitad del rango, ya que jamás los podrías usar. Entonces, si vas a usar un número como ID, siempre será positivo y por tanto debes declararlo UNSIGNED.

¿Se entiende mejor?

Respecto al tema del valor entre paréntesis que te pone aunque no lo pongas, mira el link que te pasé y lo entenderás mejor.

Nota:

Los DECIMAL, FLOAT, etc., por definición de tipo de datos son siempre con signo. En el caso del primero y se debe indicar la longitud total de la cifra (punto y decimales incluidos) , pero no en FLOAT (que los acepta), porque DECIMAL es un tipo de dato de precisión, mientras que FLOAT es por aproximación.
Si vas a almacenar valores de dinero, usa DECIMAL, no FLOAT (recomendación del manual de referencia oficial).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)