10

Muszę umieścić cenę niektórych przedmiotów w tabeli mysql. Podczas tworzenia tabeli używam DECIMAL(10,2), ponieważ nie potrzebuję więcej niż 2 cyfry po przecinku (na przykład: 123,45 będzie akceptowane jako dane wejściowe, ale 123 456 zostanie zaokrąglone do 123,45 z PHP).Obsługa liczb dziesiętnych w mysqli

Pierwsze pytanie: używając numeru DECIMAL(10,2), skąd mam wiedzieć, ile liczb można zapisać przed przecinkiem? Wiem, że to nie 10, ponieważ 10 to tylko precyzja, jakiej używa Mysql przy matematyce z tymi liczbami: więc gdzie jest określona długość samej liczby?

Drugie pytanie: Używam PHP do wprowadzenia danych użytkownika w celu dopasowania do typu danych (float z 2 liczbami po przecinku). W jaki sposób należy użyć mysqli->bind_param do wstawienia tych danych? Którego z tych typów danych (z documentation) zaakceptować przez bind_param powinienem użyć (i być może: dlaczego)?

Character Description 
i corresponding variable has type integer 
d corresponding variable has type double 
s corresponding variable has type string 
b corresponding variable is a blob and will be sent in packets 

Odpowiedz

8

DECIMAL(10,2) oznacza, że ​​10 to maksymalna ilość cyfr ma być używany. Parametr 2 określa, że ​​po prawej stronie części dziesiętnej znajdują się dwa. Oznacza to, że po lewej stronie pozostało 8 cyfr. Zobacz the manual

Jeśli chodzi o typ danych, należy użyć double, ponieważ jest to dla liczb dziesiętnych.

Integer nie ma znaków dziesiętnych, więc poda wszystkie liczby. String dotyczy wartości tekstowych, a nie liczbowych. Blob jest dla dużego obiektu binarnego, EG: obrazek

+0

dziękuję! Więc teraz rozumiem 10-2. – Saturnix

+0

Nie polecam używania 'double' lub' float', jeśli potrzebujesz dokładnych skalowanych liczb. Zobacz http://dev.mysql.com/doc/refman/5.6/en/problems-with-float.html –

+1

W tym pytaniu i odpowiedzi mysql używa 'decimal'. jest to tylko typ paramu wiązania, który jest podwójny. I to jest tylko opcja z podanych typów. –

Powiązane problemy