2013-02-22 59 views
0

我們有兩臺服務器在兩者上都有相同的代碼。在其中一個表上的查詢返回t/f布爾值true/false,另一個返回0/1。你有什麼想法爲什麼發生這種情況?也許yii設置或服務器設置?從PostgreSQL以不同格式返回的布爾值

+1

顯示(和格式化)數據庫值由您的SQL *客戶端*完成。所以你應該檢查你使用的工具的差異。 – 2013-02-22 10:10:58

+0

您是否在兩臺服務器上使用psql測試了您的查詢?結果有差異嗎? – 2013-02-22 10:48:09

+0

是的。我測試過了。在返回的數組中包含'f',其中它包含null,其中false爲false。對於true,它在第一個服務器上包含「t」,在第二個上包含「1」。 – makeron 2013-02-22 12:45:04

回答

0

第一部分背景。

許多RDBMS不支持bool類型,所以人們爲此使用非常小的int字段。 PostgreSQL支持具有三個值的bool類型:true,falsenull(或未知)。

從兩個服務器的問題都不是100%清楚的是PostgreSQL。如果一個是PostgreSQL而另一個不是,那麼可以預料到這種行爲,所以這是首先要注意的。但是,即使兩者都是PostgreSQL,數據庫設計人員也不會因爲設計一組表來使用smallint或bits而聞所未聞,然後再更改爲bool。

如果兩個系統都是PostgreSQL,那麼psql中唯一可能導致這種情況的是不同的表設計。看看\d tablename並檢查一個是否設置爲使用bool,另一個設置爲使用位或整數類型。