2009-11-25 20 views
53

En MySQL, ¿cuál es el tipo de columna preferido para almacenar el precio de un producto (o monedas en general)? Google aprendió que DECIMAL of FLOAT se utiliza a menudo, pero me pregunto cuál es mejor.MySQL: tipo de columna preferida para los precios (de productos)?

Estoy almacenando precios que van desde 0.01 a 25.00. Por supuesto, también podrían ser posibles valores más altos. (Nota: No estoy pidiendo el código de copiar pasta, solo te estoy dando más información que podría ayudarte a formar una respuesta más completa).

Gracias

Respuesta

59

decimal es el que me gustaría utilizar

La diferencia básica entre Decimal/Numérico y flotar: Float es -Número aproximado tipo de datos, que significa que no todos los valores en el rango de tipo de datos se puede representar exactamente. Decimal/Numérico es el tipo de datos Fixed-Precision , lo que significa que todos los valores de en el tipo de datos reane pueden ser representados exactamente con precisión y la escala .

Convirtiendo desde decimal o numérico a float puede causar alguna pérdida de precisión . Para los tipos de datos Decimal o Numérico , SQL Server considera cada combinación de precisión y la escala como un tipo de datos diferente. DECIMAL (4,2) y DECIMAL (6,4) son diferentes tipos de datos. Esto significa que 11.22 y 11.2222 son tipos diferentes aunque este no es el caso de float. Para FLOAT (6) 11.22 y 11.2222 son mismos tipos de datos.

+0

Gracias jdt199 y Razzie, aceptarían ambas respuestas pero eligieron la suya por ser la más completa. – SolidSmile

+1

@Sheff DECIMAL (2,2) debe ser DECIMAL (4,2). DECIMAL (2,4) debe ser DECIMAL (6,4). Ver https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html – cgaldiolo

13

No utilizaría float ya que puede dar errores de redondeo, ya que es un tipo de coma flotante.

Uso decimales:

"El DECIMAL y tipos numéricos se utilizan para almacenar valores de los que es importante preservar exacta precisión, por ejemplo, con los datos monetarios "

véase: http://dev.mysql.com/doc/mysql/en/numeric-types.html

+0

Además, ver: https://dev.mysql.com/doc/refman/5.7/ es/fixed-point-types.html – Amr

23

tipo de campo "decimal" es bueno.

Si tiene precios más altos, puede usar product_price decimal(6,2) NOT NULL,, es decir, puede almacenar precios de hasta 6 dígitos con un punto decimal antes de 2 dígitos.

Valor máximo para el campo product_price decimal(6,2) NOT NULL, almacenará precio hasta 9.999,99

Si todos los precios son entre 0,01 a 25.00 y luego product_price decimal(4,2) NOT NULL, será bueno, pero si va a tener precios más altos a continuación, se puede establecer cualquier valor en decimal(4,2).

6

Prefiero INT (precio multiplicado por 100) que resuelve el problema de coma flotante en otro software.

+2

Heredé dicho sistema, fue gracioso ver cómo este hombre multiplicó todos los precios antes de hacer búsquedas en DB en función del precio y viceversa. Más tarde he tenido suficiente dolor atrapando errores debido a esto antes de moverme a decimal – Tebe

+0

@ ГляОпаОпа ¿cómo se puede abordar el problema de punto flotante usando decimal? – Peter

+0

antes de almacenar redondeo cada número al tercer signo tras punto y use DECIMAL (N, 3) para almacenar – Tebe

Cuestiones relacionadas