2011-08-26 56 views
0

查詢Oracle數據庫時出現奇怪的問題。我在完全相同的邏輯上得到了不同的結果,但是在兩個不同的Windows Apache設置上,據我所知,它們實際上是相同的版本和配置。PHP oci select返回Windows上的四捨五入浮點數Apache

問題是,當我從表中選擇3列(數字(10),數字(10),數字(10,4))時,同一查詢在第3列的一臺計算機上返回正確的小數位,不同的機器,它刪除小數,我只得到整個部分的數字。

我不知道什麼設置控制Oracle如何返回Number(10,4)數據類型,我沒有看到兩臺機器上的Oracle客戶端,Apache和PHP設置有任何差異。

這可能是什麼原因?提前

感謝,

伊利亞

+0

這完全不依賴於Apache,在這種情況下......它可能與PHP無關。看看你是否有相同版本的OCI驅動程序。 – Narf

回答

3

想通了,我注意到,看起來像PHP的OCI Oracle查詢機器上的「忽略」小數它實際上是界定小數用逗號,不是句號。它必須與NLS設置顯示一個數字。

有3個級別的NLS設置:DATABASEINSTANCESESSIONSESSION具有最高的優先級。因此,爲了使一些在常規格式1,234.56成千上萬由時期,我們需要設置* NLS_NUMERIC_CHARACTERS *爲「」使用以下命令用逗號和小數點分隔顯示:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,' 

我在進行任何查詢之前執行命令,以便我所有的數字都是正確的。

+1

OCI驅動程序將所有數字作爲PHP字符串返回。我想你沒有檢查實際值,而是在一些PHP後處理後的結果。沒關係,很高興你解決它並報告回來。 –

+0

是的,我注意到它只有當我實際上得到所有的行分開顯示,並清楚地看到返回的值 – Ilya