putenv没有任何影响 - oracle数据库

时间:2017-07-10 06:59:37

标签: php oracle

我正在尝试使用NLS_LANG更改OracleDatabase中的putenv。 当我这样做时它工作正常:

$a = putenv("NLS_LANG=AMERICAN_AMERICA.AL32UTF8");
var_dump($a); // bool(true)
$ab = getenv("NLS_LANG");
var_dump($ab); // string(25) "AMERICAN_AMERICA.AL32UTF8"

但是当我连接并查询时,它会给我不同的结果:

$dbSetting = '(DESCRIPTION = 
    (ADDRESS = (PROTOCOL = TCP)
    (HOST = SERVER_HOST)(PORT = 15210)) 
    (CONNECT_DATA = (SERVICE_NAME = orcl) 
    (SID = orcl)))';
$conn = oci_connect('dbuser', 'dbuser', $dbSetting, 'AL32UTF8') or die('db not connected');
$stid = oci_parse($conn, "select userenv('language') from dual");
     oci_execute($stid);

while($row = oci_fetch_array($stid,OCI_ASSOC)){
   $arr[] = $row;
}
var_dump($arr);

我得到了这个结果:

array(1) {
  [0]=>
  array(1) {
    ["USERENV('LANGUAGE')"]=>
    string(29) "AMERICAN_AMERICA.WE8ISO8859P1"
  }
}

为什么?

请帮助我找到我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

我想在下面的评论后面我可以在这里写下答案:

  

SELECT USERENV('语言')FROM DUAL;给出会议的   语言和区域,但DATABASE字符集不是客户端,   因此返回的值不是客户完整的NLS_LANG设置。 [LINK]

至于为什么"如果改变了env的值。变量然后它不可见" - 检查上面答案的粗体部分。

干杯

答案 1 :(得分:0)

由于可以在代码运行之前加载Oracle库或创建连接,因此您不应该在代码中设置Oracle环境变量,因为结果不是确定性的。