查询Oracle数据库时遇到了一个奇怪的问题。我在完全相同的逻辑上获得了不同的结果,但是在两个不同的Windows Apache设置上,据我所知,这些设置实际上是相同的版本和配置。
问题在于,当我从表中选择3列(Number(10),Number(10),Number(10,4))时,相同的查询会在一台机器上为第3列返回正确的小数,而在不同的列上机器它删除小数,我只得到数字的整个部分。
我不知道哪些设置控制了Oracle如何返回Number(10,4)数据类型,我没有看到这两台机器上的Oracle客户端,Apache和PHP设置有任何差异。
这可能是什么原因?
非常感谢,
伊利亚安德
答案 0 :(得分:3)
想出来,我注意到在看起来像php oci oracle查询“省略”小数的机器上,它实际上是用逗号分隔小数,而不是句点。它与NLS设置有关,用于显示数字。
有3个级别的NLS设置: DATABASE , INSTANCE 和 SESSION 。 SESSION 具有最高优先级。因此,为了使数字以常规格式显示为1,234.56,其中数字用逗号分隔,小数用句点分隔,我们需要使用以下命令将* NLS_NUMERIC_CHARACTERS *设置为'。,':
ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '.,'
我在任何查询之前执行命令,所以我的所有数字现在都正确。