DOUBLE sloupce nejsou stejné jako DECIMAL sloupce a budete mít potíže pokud pro finanční údaje používáte DOUBLE sloupce.
DOUBLE je ve skutečnosti pouze verze s dvojitou přesností (64 bitů namísto 32 bitů) verze FLOAT . Čísla s plovoucí desetinnou čárkou jsou přibližná vyjádření skutečných čísel a nejsou přesné. Ve skutečnosti jednoduchá čísla jako 0,01 nemají přesné zastoupení v typech FLOAT nebo DOUBLE.
Sloupce DECIMAL jsou přesné reprezentace, ale zabírají mnohem více místa pro mnohem menší rozsah možných čísel. Chcete-li vytvořit sloupec schopný pojmout hodnoty od 0,0001 do 99,9999, jak jste požadovali, budete potřebovat následující příkaz
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
Definice sloupce má formát DECIMAL(M, D), kde M je maximální počet číslic (přesnost ) a D je počet číslic napravo od desetinné čárky (škála ).
To znamená, že předchozí příkaz vytvoří sloupec, který přijímá hodnoty od -99,9999 do 99,9999. Můžete také vytvořit sloupec UNSIGNED DECIMAL v rozsahu od 0,0000 do 99,9999.
Pokud chcete například sloupec, který přijímá hodnoty od -9999,99 do 9999,99, příkaz by byl DECIMAL(6,2)
. Jak vidíte, stále používáte přesnost ze 6, ale umožňují pouze měřítko ze 2.
Další informace o MySQL DECIMAL naleznete v oficiálních dokumentech jsou vždy skvělým zdrojem.
Mějte na paměti, že všechny tyto informace platí pro verze MySQL 5.0.3 a vyšší. Pokud používáte předchozí verze, měli byste opravdu upgradovat.
Aktualizace na MySQL 8.0.17+
Unsigned je zastaralý pro sloupce FLOAT, DOUBLE a DECIMAL.