Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/06/2004, 10:44
Avatar de Genetix
Genetix
 
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
hola jabundio
El rango para un DECIMAL(M,D), depende mucho de tu versión MySql.

En versiones Mysql anteriores al 3.23 las columnas que son de tipo DECIMAL(M,D), se almacenan usando M bytes por valor, incluyendo el signo(-) si era necesario y el punto decimal también están incluido dentro de los M bytes.
Ejemplo, DECIMAL(5,2) los rangos serian -9.99 a 99.99 como veras tanto los 2 valores tienen 5 caracteres(incluyendo puntos y signos).

En versiones Mysql superiores a 3.23 las columnas que son de tipo DECIMAL(M,D), se manejan de acuerdo con la especificación ANSI, la cual expresa que un tipo DECIMAL(M,D) debe tener la capacidad de representar a cada valor con M dígitos y D decimales, esto quiere decir que aun los signos y puntos deben estar almacenados, por eso en en el manual oficial de mysql vas encontrar:
Código:
DECIMAL(M,D) |  M+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D)
Esto quiere decir que para DECIMAL(5,2), se necesitan 7 bytes para el valor "mas largo" (máximo de caracteres dentro de la columna, entonces seria 7 caracteres), el valor mas largo vendría a ser -999.99 como veras el valor expresado tiene 7 caracteres (5 caracteres numero y 2 caracteres signos).
Cuando Mysql representa un valor positivo, aprovecha el byte del signo(-), para poder extender su rango mas alla, entonces para un DECIMAL(5,2) seria 9999.99, como ves el valor expresado tiene (6 caracteres numero y un caracter signo).

Cita:
yo pongo 5,3 (5 digitos con 3 decimales) como longitud y que me ponga como predeterminado 1234.5 y me inserta 999.999
El valor 1234.5, Mysql lo almacena 1234.500 y este valor tiene 8 caracteres, lo cual superará el rango de tu columna, la cual es -99.999 a 999.999. La columna al verse superado coloca el valor mas alto el cual vendria a ser 999.999.

mas información la encuentras en http://dev.mysql.com/doc/mysql/en/St...uirements.html

Saludos!

Última edición por Genetix; 26/12/2008 a las 22:14 Razón: Corrigiendo algunos errores ortográficos 26/12/2008