Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con DECIMAL en mysql

Estas en el tema de Problema con DECIMAL en mysql en el foro de Mysql en Foros del Web. Hola a todos, tengo el siguiente problema con mysql al insertar un campo de tipo decimal. La verdad esque no se muy bien como va ...
  #1 (permalink)  
Antiguo 09/06/2004, 01:57
 
Fecha de Ingreso: marzo-2004
Mensajes: 56
Antigüedad: 20 años, 1 mes
Puntos: 0
Problema con DECIMAL en mysql

Hola a todos, tengo el siguiente problema con mysql al insertar un campo de tipo decimal.
La verdad esque no se muy bien como va pero por lo que he leido en la longitud el primer numero indica los digitos en total y el segundo el numero de decimales. Entonces yo pongo 5,3 (5 digitos con 3 decimales) como longitud y que me ponga como predeterminado 1234.5 y me inserta 999.999 que encima tiene mas de 5 digitos por lo que yo no entiendo nada; si alguien me puede ayudar y decirme como funciona exactamente este tipo de campo??

Gracias a todos, espero vuestra respuesta :)
  #2 (permalink)  
Antiguo 09/06/2004, 10:44
Avatar de 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
  #3 (permalink)  
Antiguo 10/06/2004, 02:19
 
Fecha de Ingreso: marzo-2004
Mensajes: 56
Antigüedad: 20 años, 1 mes
Puntos: 0
Muchas gracias Genetix me lo has dejado muy claro; ahora ya entiendo todo jeje. No cai en los signos que tambien cuantan; en fin que le voy ha hacer si no me dio pa mas. Muchas gracias de nuevo. :D
  #4 (permalink)  
Antiguo 14/08/2006, 13:17
Avatar de Heros  
Fecha de Ingreso: abril-2005
Mensajes: 69
Antigüedad: 19 años
Puntos: 1
muchas gracias amigos.. aunque el post es de casi 4 años atras... me sirvio..
thx.
__________________
im knowing mi digitalself...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 12:04.