Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/10/2015, 09:07
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: 17 años
Puntos: 2658
Respuesta: Un campo de tipo varchar persistente

Es un tema recurrente, y es de manual...
Se llama "rango de representación de numeros binarios", y puedes verlo en este link: http://dev.mysql.com/doc/refman/5.6/...ger-types.html


Los números, en los sistemas de BBDD no existen como cifras, sino que se almacenan como binarios, según su tipo declarado Elos INT son enteros de 4 bytes de longitud, lo que representa 32 bits.
Si haces la conversión de un binario de 32 bits con todos unos (1), encontrarás que el maximo posible es 4.294.967.295, pero como se tiene que reservar la mitad de las representaciones posibles a los negativos, y además uno al menos se usa para el cero, cuando el INT es con signo, el máximo posible es -2147483648 a 2147483647... exactamente lo que obtienes.
¿Cuál es la solución?

En primer lugar, define de qué tipo de dato se trata, porque no todos los números se deben almacenar como tales, por ejemplo los telefónicos.
Los números telefónicos, dado que pueden contener ceros iniciales (DDI o DDL), no se acostumbra a ponerlos en campos numéricos. Un numero telefónico es conveniente que esté compuesto de dos campos: la característica o numero local de ciudad, y el numero propiamente dicho. Eso facilita las consultas.

Si además, el mayor numero posible es inferior a 4.294.967.295, y no necesitas negativos, simplemente declaralo INT UNSIGNED y tendrás lo que necesitas.
Pero si vas a usar numero mayores a ese 4.294.967.295, necesitarás un BIGINT, y no INT, ya que el rango de un BIGINT es de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 con signo, y 0 a 18.446.744.073.709.551.615 sin signo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)