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!