Le colonne DOUBLE non lo stesso delle colonne DECIMAL e avrai problemi se utilizzi le colonne DOUBLE per i dati finanziari.
DOUBLE è in realtà solo una versione a doppia precisione (64 bit anziché 32 bit) di FLOAT . I numeri in virgola mobile sono rappresentazioni approssimative di numeri reali e non sono esatti. In effetti, i numeri semplici come 0,01 non hanno una rappresentazione esatta nei tipi FLOAT o DOUBLE.
Le colonne DECIMAL sono rappresentazioni esatte, ma occupano molto più spazio per un intervallo molto più piccolo di numeri possibili. Per creare una colonna in grado di contenere valori da 0,0001 a 99,9999 come hai chiesto avresti bisogno della seguente istruzione
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
La definizione della colonna segue il formato DECIMAL(M, D) dove M è il numero massimo di cifre (la precisione ) e D è il numero di cifre a destra del punto decimale (la scala ).
Ciò significa che il comando precedente crea una colonna che accetta valori da -99,9999 a 99,9999. Puoi anche creare una colonna UNSIGNED DECIMAL, che va da 0,0000 a 99,9999.
Ad esempio, se vuoi una colonna che accetti valori da -9999,99 a 9999,99 il comando sarebbe DECIMAL(6,2)
. Come puoi vedere, usi ancora una precisione di 6, ma consente solo una scala di 2.
Per ulteriori informazioni su MySQL DECIMAL, i documenti ufficiali sono sempre una grande risorsa.
Tieni presente che tutte queste informazioni sono valide per le versioni di MySQL 5.0.3 e successive. Se stai utilizzando versioni precedenti, dovresti davvero eseguire l'aggiornamento.
Aggiornamento su MySQL 8.0.17+
Unsigned è deprecato per le colonne FLOAT, DOUBLE e DECIMAL.