/ / Tipo de columna para guardar un número muy diferente de decimales - mysql, decimal

Tipo de columna para guardar un número muy diferente de decimales - mysql, decimal

Necesito almacenar números como

21000
1.0002
0.00230235
12323235
0.2349523

Esto es sensordata, por lo que es importante mantener el valor exacto. Hay muchas opciones.

Mi solución sería multiplicar todos los valores por 1 millón y almacenarlos como un bigint. ¿Eso tendría sentido?

Respuestas

1 para la respuesta № 1

Eso tiene sentido, pero te recomiendo que solo uses el decimal tipo de datos: https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html

Si tuvieras que multiplicar por millones y si unel conjunto de datos que recibe tiene un decimal más del que esperaría, terminaría multiplicando ese número por 10 millones y todos los demás números por 10. En su lugar, utilice el decimal datatype le dará 30 números a la derecha del decimal.

La sintaxis de declaración para una columna DECIMAL es DECIMAL (M, D). los Los rangos de valores para los argumentos en MySQL 5.7 son los siguientes:

M es el número máximo de dígitos (la precisión). Tiene un rango de 1. a 65.

D es el número de dígitos a la derecha del punto decimal (el escala). Tiene un rango de 0 a 30 y no debe ser mayor que M.

y

El estándar SQL requiere que la precisión deNUMÉRICO (M, D) sea exactamente M dígitos. Para DECIMAL (M, D), el estándar requiere una precisión de al menos M dígitos pero permite más. En MySQL, DECIMAL (M, D) y NUMERIC (M, D) son iguales, y ambos tienen una precisión de exactamente M dígitos

Para obtener una explicación completa del formato interno de los valores DECIMAL, vea el archivo strings / decimal.c en una distribución fuente MySQL. El formato se explica (con un ejemplo) en la función decimal2bin ().

Para formatear sus números, puede formatear como se describe en esta respuesta: Formato de número a 2 decimales

Ejemplo

create table test (
price decimal(40,20)
);

-- all the above insertions will succeed cleanly
insert into test values (1.5), (1.66), (1.777), (1.12345678901234567890);

-- notice we have 21 digits after decimal
-- MySQL will insert data with 20 decimal and add a warning regarding data truncation
insert into test values (1.123456789012345678901);

Datos

select * from test

price
1.50000000000000000000
1.66000000000000000000
1.77700000000000000000
1.12345678901234567890
1.12345678901234567890

select cast(price as decimal(40,2)) from test

price
1.50
1.66
1.78
1.12
1.12