Jak wstawić dziesiętne do bazy danych MySQL

Mam tabelę bazy danych z polami, jedno z nich, cost, jest ustawione na typ danych DECIMAL. Ustawiłem parametry na 4,2, które powinny zezwalać na 4 Liczby przed przecinkiem, a następnie 2.

(powiedziano mi, że 4 tutaj jest całkowita kwota, a {[6] } to kwota po przecinku, czy ktoś mógłby to wyjaśnić na marginesie?)

Kiedy wstawiam dane poprzez żądanie POST (wartość 3.80 na przykład) dane zapisane do mojego baza danych jest w rzeczywistości 99.99.

Co robię źle, żeby to spowodować?

Oto Tabela:

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(256) NOT NULL,
`cost` decimal(4,2) NOT NULL,
PRIMARY KEY (`id`)
)

Oto moje zapytanie:

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80')

Update: Działa po zmianie 4,2 na 6,2

Author: Alex, 2011-08-09

3 answers

Typy dziesiętne MySql są nieco bardziej skomplikowane niż tylko lewy i prawy punkt dziesiętny.

Pierwszym argumentem jest precyzja , która jest liczbą całkowitą cyfr. Drugi argument to scale, która jest maksymalną liczbą cyfr po prawej stronie punktu dziesiętnego.

Zatem {[0] } może być czymkolwiek od -99.99 do 99.99.

Jeśli chodzi o to, dlaczego otrzymujesz 99.99 zamiast pożądanego 3.80, wartość, którą wstawiasz, musi być interpretowana jako większe niż 99.99, więc używana jest wartość maksymalna. Może mógłbyś wysłać kod, którego używasz do wstawiania lub aktualizowania tabeli.

Edit

Poprawiono niezrozumienie użycia skali i precyzji, na http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html .

 37
Author: JYelton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-09 16:44:50

Tak, 4,2 oznacza "łącznie 4 cyfry, z których 2 są po przecinku". Oznacza to liczbę w formacie 00.00. Poza tym będziesz musiał pokazać nam swoje zapytanie SQL. PHP nie przetłumaczy 3.80 na 99.99 bez dobrego powodu. Być może błędnie Ustawiłeś pola / wartości w zapytaniu i próbujesz wstawić większą liczbę, która należy do innego pola.

 7
Author: Marc B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-09 16:35:50

Zauważyłem coś jeszcze w Twoim kodowaniu.... look

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80')

W kodzie "CREATE TABLE" masz id ustawione na "AUTO_INCREMENT", co oznacza, że automatycznie generuje wynik dla tego pola.... ale w powyższym kodzie dodajesz go jako jedną z wstawek, a w "wartościach" masz tam 0... idk jeśli w ten sposób chcesz nam powiedzieć, że zostawiłeś to puste, ponieważ jest ustawione na AUTO_INC. albo jeśli to jest prawdziwy kod, który masz... jeśli jest to kod, który masz nie tylko powinien nie próbuje wysłać dane do zestawu pól, aby wygenerować je automatycznie, ale dobrym sposobem na zrobienie tego źle byłoby

'0',

Wkładasz

0,

Lol....so to może być przyczyną jakiegoś problemu... Zauważyłem też, że w kodzie po "opisie testu" masz spację przed '.... to też może coś wyrzucać.... idk.. Mam nadzieję, że to pomoże rozwiązać jakiś inny problem, który możesz teraz ciągnąć za włosy.... skoro o tym mowa.... Muszę się dowiedzieć. mój problem, zanim wyrwę wszystkie włosy..... powodzenia.. :)

Aktualizacja.....

Prawie zapomniałem... jeśli masz tam 0, aby pokazać, że jest puste... możesz wpisać "tytuł testu" jako identyfikator i " opis testu "jako tytuł, a następnie" 3.cokolwiek "za opis pozostawiając" koszt " pusty...... co może być powodem, dla którego to się wyczerpało, bo jeśli się nie mylę, masz ustawione na "NOT NULL".... i zostawiłeś to bez zmian... więc to coś wymusiło... może.... lol
 6
Author: Optiq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-30 07:55:59