INF.04 · pytanie 676
Zastosowanie typu DECIMAL języka MySQL wymaga wcześniejszego zdefiniowania długości (liczby cyfr) przed przecinkiem oraz liczby cyfr po przecinku. Jest to zapis
- Alogiczny
- Bzmiennoprzecinkowy
- Cłańcuchowy
- DstałoprzecinkowyPoprawna
Wyjaśnienie
Typ DECIMAL w MySQL jest typem stałoprzecinkowym, czyli przechowuje liczby z ustaloną precyzją i ustaloną liczbą miejsc po przecinku. W praktyce zapisuje się go najczęściej jako DECIMAL(M,D), na przykład DECIMAL(10,2). Formalnie M oznacza łączną liczbę cyfr, a D liczbę cyfr po przecinku, więc dla DECIMAL(10,2) można zapisać maksymalnie 8 cyfr przed przecinkiem i 2 po przecinku. To ważny szczegół, bo czasem mówi się skrótowo, że definiujemy cyfry przed i po przecinku, ale w składni MySQL podaje się precyzję całkowitą oraz skalę. Ten typ jest bardzo przydatny przy pieniądzach, cenach, podatkach, rabatach czy stanach magazynowych, gdzie błąd zaokrąglenia byłby problemem. Moim zdaniem to jedna z tych rzeczy w SQL, które naprawdę warto kojarzyć praktycznie: do kwot używamy DECIMAL, a nie FLOAT. Dobre praktyki bazodanowe zalecają stosowanie typów dokładnych dla danych finansowych, bo silnik bazy nie powinien losowo zmieniać końcówek groszy przez reprezentację binarną liczby.