Neden benim tüm (PHP) float değerini saklamak postgresql değil mi?

3 Cevap php

Ben Postgres bir çift hassasiyetli sütuna PHP kayan nokta değeri 63,59072952118762 saklamak için deneyin. Postgres 63,59073 olarak değerini saklar. Herkes neden biliyor mu? 8 bayt bu değer için fazlasıyla yeterli olmalıdır. Ben hassasiyetini belirtirken çalıştığı, veri türü sayısal ile denedim, ama bu gerçekten gerekli olmamalıdır.

Update: 63,5907295 saklamak için çalışırken aynı sorun mevcut, bu yüzden saklı vurmayacak önce bir şey çift ile olur öneri gerçekçi görünüyor.

Update II (partly solved): Ben çift parametre bu gibi görünüyor atamak satır:

$stmt->bindParam(4, $this->latitude);

Ben bilmiyordum şey PDO varsayılan kendi param türü dize o. Ben :: PARAM INT daha iyi bir alternatif eksikliği PDO için değişti (PARAM DOUBLE bir seçenek değildi), ve (en azından, bazı ilerlemeler) postgres'in saklanan double 10 basamak hassasiyet var. Ben sayısal tip iyi çalıştığını kontrol ettik, bu yüzden sayısal 10'dan fazla ondalık bir hassasiyete sahip olması PDO ve çiftler kullanırken gitmek için yol olduğunu görünüyor.

Her neyse, bana bu tür bir kesinlik olması için bir zorunluluktur eğer birisi de belirtildiği gibi, ben bilmiyorum, ama ben kendi içinde sorun araştırılmalıdır hak düşünüyorum.

3 Cevap

  • Nasıl PostgreSQL saklamak ne belirler?
  • Nasıl PostgreSQL veri göndermek mi?
  • Nasıl verileri tekrar geri alabilirim?
  • Bunu nasıl görüntülerim?
  • Veritabanındaki sütun türü nedir?

PHP ve verileri temsil etmek için nasıl bir karışıklık olabilir PostgreSQL arasında yolda pek çok yer vardır.


Bu veriler, DBMS sokulur açıklamak için önemlidir. INSERT deyiminde değişmez bir değer kullanarak ciltli parametreleri kullanarak sorunları farklı bir dizi yol açar. Eğer SQL değerini yazdı:

INSERT INTO SomeTable(SomeColumn) VALUES(63.xxxxxxxxx);

ve veri kesildi, PostgreSQL bir sorun aşağı olurdu. Eğer değişken bağlarsanız, PHP ve PDO PostgreSQL modülleri değeri ile ne anlamak emin olmak gerekir - bu yüzden bir çift veya bir dize olarak, ve dönüşüm ile hangi kod fırsatlar ve olarak gönderilir.

Sen Perl DBI + + DBD :: YourDBMS (sizin durumda DBD :: Pg) ile benzer konularda çalıştırın.

Eğer ihtiyacınız varsa DECIMAL/NUMERIC yazın kullanmayı düşünün o kadar hassas

PostgreSQL şamandıra (25) (53) çift duyarlıklı seçmek yüzer iken (1), gerçek tipini seçmek gibi (24) yüzer yüzer kabul eder.

Çoğu platformlar PG üzerinde, gerçek türü en az 1E-37, en az 6 hanelik bir hassasiyetle +37 1E bir dizi vardır. Çift hassasiyetli türü genellikle çevresinde 1E-307 en az 15 basamak hassasiyetle 308 1E (REF) bir dizi var

Hangisini kullanıyorsunuz?