0

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

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

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

这可能是什么原因?

提前谢谢,

伊利亚

4

1 回答 1

3

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

NLS 设置有 3 个级别:DATABASEINSTANCESESSIONSESSION具有最高优先级。因此,为了使数字以传统格式显示为 1,234.56,其中千位用逗号分隔,小数点用句点分隔,我们需要使用以下命令将 *NLS_NUMERIC_CHARACTERS* 设置为“.”:

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,'

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

于 2011-08-29T15:46:52.130 回答