Nie mogę całkiem pojąć wartości DECIMAL MySQL. Potrzebuję tego wiersza, aby mógł zawierać liczbę od 00.0001 do 99.9999. Jak bym to zorganizował, aby działał w ten sposób?
Naprawdę powinieneś zaakceptować poprawną odpowiedź. Aktualnie akceptowana odpowiedź jest nieprawidłowa.
Olhovsky
2
Skończyło się tutaj i przeczytaj odpowiedź, twierdząc, że DECIMAL UNSIGNED nie jest możliwe. Zobacz nową odpowiedź poniżej, aby uzyskać prawidłową specyfikację.
Markus AO
Odpowiedzi:
439
Kolumny DOUBLE to nie to samo co kolumny DECIMAL i będziesz mieć kłopoty, jeśli użyjesz kolumn DOUBLE dla danych finansowych.
DOUBLE jest właściwie wersją FLOAT o podwójnej precyzji (64-bitowa zamiast 32-bitowa) . Liczby zmiennoprzecinkowe są przybliżonymi reprezentacjami liczb rzeczywistych i nie są dokładne. W rzeczywistości proste liczby, takie jak 0,01, nie mają dokładnej reprezentacji w typach FLOAT lub DOUBLE.
Kolumny DECIMAL są dokładnymi reprezentacjami, ale zajmują dużo więcej miejsca dla znacznie mniejszego zakresu możliwych liczb. Aby utworzyć kolumnę zdolną do przechowywania wartości od 0,0001 do 99,9999, tak jak prosiłeś, potrzebujesz następującej instrukcji
Definicja kolumny jest zgodna z formatem DECIMAL (M, D), gdzie M to maksymalna liczba cyfr ( precyzja ), a D to liczba cyfr po prawej stronie przecinka dziesiętnego ( skala ).
Oznacza to, że poprzednie polecenie tworzy kolumnę, która przyjmuje wartości od -99,9999 do 99,9999. Możesz również utworzyć kolumnę UNSIGNED DECIMAL, z zakresu od 0,0000 do 99,9999.
Aby uzyskać więcej informacji na temat MySQL DECIMAL, oficjalne dokumenty są zawsze świetnym źródłem informacji.
Należy pamiętać, że wszystkie te informacje dotyczą wersji MySQL 5.0.3 i nowszych. Jeśli używasz poprzednich wersji, naprawdę powinieneś dokonać aktualizacji.
Zagłosowano na twoją odpowiedź. Twoja odpowiedź jest poprawna, a druga nie (ponieważ twierdzi, że „podwójne = dziesiętne”). DECIMAL to typ stałoprzecinkowy z dokładną wartością, a jego synonimy to NUMERIC, DEC i FIXED. Nie DOUBLE, ponieważ DOUBLE jest typem zmiennoprzecinkowym, który reprezentuje przybliżone liczbowe wartości danych. W przypadku użycia DECIMAL (<1-65>, <0-30>) pierwszy parametr to liczba cyfr, a drugi to liczba cyfr po prawej stronie przecinka dziesiętnego.
Norbert
2
Tak masz rację. Zwróć uwagę, że działa dla MySQL 5.0.3 i nowszych
ajreal
1
Plakat poprosił o pole dziesiętne zawierające wartości od 0,0001 do 99,9999. Dodałem dodatkowe informacje, aby wyjaśnić, że utworzone pole faktycznie obsługuje wartości od -99,9999 do 99,9999. Dziękujemy za opinię! Dodano również zastrzeżenie dotyczące wersji MySQL.
Alex Recarey
1
Powiedziałeś „Nie ma sposobu na utworzenie kolumny DECIMAL bez znaku”, ale przykładowy kod wskazuje „DECIMAL (6,4) UNSIGNED NOT NULL”. Dlaczego to?
Liang
3
@AlexRecarey Wydaje się, że jestem w stanie stworzyć DECIMAL UNSIGNED. oraz instrukcja dla MySQL 5.x zgadza: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. W przypadku wartości ujemnych zwróci błąd poza zakresem. Możesz również utworzyć niepodpisane FLOAT i DOUBLE. Instrukcja: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Markus AO
67
Chociaż powyższe odpowiedzi wydają się poprawne, wystarczy proste wyjaśnienie, aby dać ci wyobrażenie, jak to działa.
Załóżmy, że Twoja kolumna jest ustawiona na DECIMAL(13,4). Oznacza to, że kolumna będzie miała łączny rozmiar 13 cyfr, z których 4 zostaną użyte do precyzyjnej reprezentacji.
Podsumowując, dla tej kolumny miałbyś maksymalną wartość: 999999999.9999
MySQL 5.x specyfikacja dla typu danych dziesiętnej: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. Powyższa odpowiedź jest błędna, mówiąc, że liczby dziesiętne bez znaku nie są możliwe.
Aby zdefiniować pole zezwalając jedynie niepodpisanych dziesiętne, o łącznej długości 6 cyfr, z których 4 są dziesiętne, należy użyć: DECIMAL (6,4) UNSIGNED.
Możesz również tworzyć typy danych bez znaku (tj. Bez wartości ujemnych) FLOAT i DOUBLE.
Odpowiedzi:
Kolumny DOUBLE to nie to samo co kolumny DECIMAL i będziesz mieć kłopoty, jeśli użyjesz kolumn DOUBLE dla danych finansowych.
DOUBLE jest właściwie wersją FLOAT o podwójnej precyzji (64-bitowa zamiast 32-bitowa) . Liczby zmiennoprzecinkowe są przybliżonymi reprezentacjami liczb rzeczywistych i nie są dokładne. W rzeczywistości proste liczby, takie jak 0,01, nie mają dokładnej reprezentacji w typach FLOAT lub DOUBLE.
Kolumny DECIMAL są dokładnymi reprezentacjami, ale zajmują dużo więcej miejsca dla znacznie mniejszego zakresu możliwych liczb. Aby utworzyć kolumnę zdolną do przechowywania wartości od 0,0001 do 99,9999, tak jak prosiłeś, potrzebujesz następującej instrukcji
Definicja kolumny jest zgodna z formatem DECIMAL (M, D), gdzie M to maksymalna liczba cyfr ( precyzja ), a D to liczba cyfr po prawej stronie przecinka dziesiętnego ( skala ).
Oznacza to, że poprzednie polecenie tworzy kolumnę, która przyjmuje wartości od -99,9999 do 99,9999. Możesz również utworzyć kolumnę UNSIGNED DECIMAL, z zakresu od 0,0000 do 99,9999.
Aby uzyskać więcej informacji na temat MySQL DECIMAL, oficjalne dokumenty są zawsze świetnym źródłem informacji.
Należy pamiętać, że wszystkie te informacje dotyczą wersji MySQL 5.0.3 i nowszych. Jeśli używasz poprzednich wersji, naprawdę powinieneś dokonać aktualizacji.
źródło
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. W przypadku wartości ujemnych zwróci błąd poza zakresem. Możesz również utworzyć niepodpisane FLOAT i DOUBLE. Instrukcja: dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.htmlChociaż powyższe odpowiedzi wydają się poprawne, wystarczy proste wyjaśnienie, aby dać ci wyobrażenie, jak to działa.
Załóżmy, że Twoja kolumna jest ustawiona na
DECIMAL(13,4)
. Oznacza to, że kolumna będzie miała łączny rozmiar 13 cyfr, z których 4 zostaną użyte do precyzyjnej reprezentacji.Podsumowując, dla tej kolumny miałbyś maksymalną wartość:
999999999.9999
źródło
W komentarzach znajdują się poprawne rozwiązania, ale podsumowując je w jednej odpowiedzi:
Musisz użyć DECIMAL (6,4).
Wtedy możesz mieć łącznie 6 cyfr, 2 przed i 4 po przecinku (skala). Przynajmniej zgodnie z tym .
źródło
MySQL 5.x specyfikacja dla typu danych dziesiętnej:
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Powyższa odpowiedź jest błędna, mówiąc, że liczby dziesiętne bez znaku nie są możliwe.Aby zdefiniować pole zezwalając jedynie niepodpisanych dziesiętne, o łącznej długości 6 cyfr, z których 4 są dziesiętne, należy użyć:
DECIMAL (6,4) UNSIGNED
.Możesz również tworzyć typy danych bez znaku (tj. Bez wartości ujemnych) FLOAT i DOUBLE.
źródło