2011-01-29 13 views
122

No puedo entender el DECIMAL de MySQL. Necesito la fila para poder contener un número entre 00,0001 y 99.9999. ¿Cómo lo estructuraría para que funcione así?¿Cómo usar MySQL DECIMAL?

+8

* (Referencia) * http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html –

+4

Realmente debería aceptar la respuesta correcta. La respuesta actualmente aceptada es incorrecta. – Olhovsky

+2

Termine aquí y lea la respuesta que dice que DECIMAL UNSIGNED no es posible. Consulte la respuesta nueva a continuación para obtener la especificación correcta para esto. –

Respuesta

344

columnas dobles son no lo mismo que las columnas DECIMAL, y se meterán en problemas si se utiliza dobles columnas de datos financieros.

DOUBLE es en realidad una versión de doble precisión (64 bit en lugar de 32 bit) de FLOAT. Los números de coma flotante son representaciones aproximadas de real numbers y no son exactas. De hecho, los números simples como 0.01 no tienen una representación exacta en los tipos FLOAT o DOUBLE.

Las columnas DECIMAL son representaciones exactas, pero ocupan mucho más espacio para un rango mucho más pequeño de números posibles. Para crear una columna capaz de mantener los valores de 0,0001 a 99,9999 como pediste que se necesita la siguiente declaración

CREATE TABLE your_table 
(
    your_column DECIMAL(6,4) NOT NULL 
); 

La definición de columna sigue el formato decimal (M, D), donde M es el número máximo de dígitos (precisión) y D es el número de dígitos a la derecha del punto decimal (escala).

Esto significa que el comando anterior crea una columna que acepta valores de -99.9999 a 99.9999. También puede crear una columna DECIMAL SIN FIRMAR, que va desde 0.0000 a 99.9999.

Para obtener más información sobre MySQL DECIMAL, el official docs es siempre un gran recurso.

Tenga en cuenta que toda esta información es verdadera para las versiones de MySQL 5.0.3 y posteriores. Si está utilizando versiones anteriores, realmente debería actualizar.

+15

Votaron su respuesta. Su respuesta es correcta, la otra respuesta no es (ya que afirma que "doble = decimal"). DECIMAL es un tipo de punto fijo con un valor exacto y sus sinónimos son NUMÉRICO, DEC y FIJO. No es DOBLE porque DOBLE es un tipo de punto flotante que representa valores aproximados de datos numéricos. Cuando se utiliza DECIMAL (<1-65>, <0-30>), el primer parámetro es el número de dígitos, y el segundo el número de dígitos a la derecha del punto decimal. – Norbert

+2

Sí, tienes razón. Tenga en cuenta que es trabajo para MySQL 5.0.3 en adelante, http://dev.mysql.com/doc/refman/5.1/en/precision-math-examples.html – ajreal

+0

@ajreal - ¿podría corregir su respuesta en consecuencia? Gracias por adelantado. – dezso

5

MySQL 5.x specification para el tipo de datos decimal es: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. La respuesta anterior es incorrecta al decir que los decimales sin signo no son posibles.

Para definir un campo que permita solo decimales sin signo, con una longitud total de 6 dígitos, 4 de los cuales son decimales, usaría: DECIMAL (6,4) UNSIGNED.

También puede crear tipos de datos FLOAT y DOBLE sin signo (es decir, no negativos).

32

Aunque las respuestas anteriores parecen correctas, solo una explicación simple para darle una idea de cómo funciona.

Supongamos que su columna está configurada para ser DECIMAL(13,4). Esto significa que la columna tendrá un tamaño total de 13 dígitos, donde 4 de estos se utilizarán para la representación de precisión.

Así, en resumen, para esa columna que tendría un valor máximo de: 999999999,9999

7

Hay soluciones correctas en los comentarios, pero para resumir en una sola respuesta:

Usted tiene que usar DECIMAL (6,4).

Luego puede tener 6 dígitos en total, 2 antes y 4 después del punto decimal (la escala). Al menos de acuerdo con this.

+1

Esto me ayudó a entender este concepto por completo. ¡Una buena explicación! –