PHP oci select在Windows Apache上返回舍入浮点数

时间:2011-08-26 20:32:24

标签: php decimal oci

查询Oracle数据库时遇到了一个奇怪的问题。我在完全相同的逻辑上获得了不同的结果,但是在两个不同的Windows Apache设置上,据我所知,这些设置实际上是相同的版本和配置。

问题在于,当我从表中选择3列(Number(10),Number(10),Number(10,4))时,相同的查询会在一台机器上为第3列返回正确的小数,而在不同的列上机器它删除小数,我只得到数字的整个部分。

我不知道哪些设置控制了Oracle如何返回Number(10,4)数据类型,我没有看到这两台机器上的Oracle客户端,Apache和PHP设置有任何差异。

这可能是什么原因?

非常感谢,

伊利亚安德

1 个答案:

答案 0 :(得分:3)

想出来,我注意到在看起来像php oci oracle查询“省略”小数的机器上,它实际上是用逗号分隔小数,而不是句点。它与NLS设置有关,用于显示数字。

有3个级别的NLS设置: DATABASE INSTANCE SESSION SESSION 具有最高优先级。因此,为了使数字以常规格式显示为1,234.56,其中数字用逗号分隔,小数用句点分隔,我们需要使用以下命令将* NLS_NUMERIC_CHARACTERS *设置为'。,':

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,'

我在任何查询之前执行命令,所以我的所有数字现在都正确。