10

Bazı öğelerin fiyatlarını mysql tablosuna koymam gerekiyor. Tabloyu oluştururken, DECIMAL(10,2) kullanıyorum, çünkü virgülden sonra 2 basamaktan daha fazlasına ihtiyacım yok (örneğin: 123,45 bir girdi olarak kabul edilir, ancak 123,456 PHP ile 123,45'e yuvarlanır).Mysqli'de ondalık sayıları tutma

İlk soru: DECIMAL(10,2) kullanarak, virgülden önce kaç sayı saklanabileceğini nasıl bilebilirim? 10 olduğunu biliyorum, 10 sadece Mysql'in bu sayılarla matematik yaparken kullandığı hassaslıktır: bu yüzden numaranın uzunluğu nerede belirtilir?

İkinci soru: Veri türüne sığması için kullanıcı girdisini döndürmek için PHP kullanıyorum (virgülden sonra 2 rakamla yüzdür). Bu verileri eklemek için mysqli->bind_param'u nasıl kullanmalıyım? bind_param tarafından kabul edilen bu veri tiplerinden hangilerinin (documentation) kullanmam gerekir (ve muhtemelen: neden)?

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 

cevap

8

DECIMAL(10,2)10 basamak sayısı kullanılacak olduğu anlamına gelir. 2, ondalığın sağ tarafında iki tane olduğunu belirtir. Yani bu, sol tarafta 8 rakamın kaldığı anlamına gelir. Bkz. the manual

Veri türü için, ondalık sayılar için olduğu gibi double kullanmalısınız.

Integer ondalık karaktere sahip değildir, bu nedenle tüm sayıları katlayacaktır. String, sayısal değerler değil metin içindir. Blob, ikili bir büyük nesne için, EG: bir resim

+0

Teşekkürler! Yani 10 - 2, şimdi anlıyorum. – Saturnix

+0

Tam ölçeklendirilmiş sayısal gerekiyorsa, 'double' veya' float' kullanılmasını önermiyorum. Bkz. Http://dev.mysql.com/doc/refman/5.6/en/problems-with-float.html –

+1

Bu soruda ve mysql, ondalık ifadesini kullanır. sadece çift olarak ayarlanmış bind param türü. Ve verilen tiplerden sadece bir seçenek. –