php putenv() return 值不一致

php putenv() return inconsistent value

我有一个连接到 Oracle 数据库的 PHP,我需要设置 NLS_LANG 变量。在我的 PHP 中,我将其设置为:

putenv("NLS_LANG=American_America.UTF8");
$oracle = $this->load->database('oracle', TRUE);

//do some query after this

但是 returned 的值不一致。一次 return

array(1) { [0]=> object(stdClass)#17 (1) { ["USERENV('LANG')"]=> string(2) "US" } } //this is correct

然后再刷新几次呢return

array(1) { [0]=> object(stdClass)#17 (1) { ["USERENV('LANG')"]=> string(2) "GB" } } //this is from my PC language setting

我用来检查 LANG 的查询是:

SELECT userenv('LANG') FROM DUAL;

有什么方法可以在不更改我的 PC 语言的情况下让它工作吗?

我的配置是:

注意:我也试过使用$_ENV但结果也不一致。

变量应该在PHP开始之前设置。来自 OCI8 documentation:

Before starting the web server, OCI8 typically requires several Oracle environment variables (see below) to locate libraries, point to configuration files, and set some basic properties such as the character set used by Oracle libraries. The variables must be set before any PHP process starts.

这是因为在流程开始后设置它们会导致只有专家才能预测的行为。

回顾一下,您可能想使用 AL32UTF8,这是 Oracle 对 UTF 8 的名称。然后,从 oci_connect() 手册页,您可以将字符集作为参数传递 - 推荐这样做:

Passing this parameter can reduce the time taken to connect.

除非您需要覆盖国家和地区组件,否则您可以让它们默认。

如果您确实需要设置 NLS_LANG,请在某些 Windows 系统环境设置中执行此操作,以便在 Apache 启动时,它具有可用的值。