我正在尝试使用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"
}
}
为什么?
请帮助我找到我在这里做错了什么?
答案 0 :(得分:1)
我想在下面的评论后面我可以在这里写下答案:
SELECT USERENV('语言')FROM DUAL;给出会议的 语言和区域,但DATABASE字符集不是客户端, 因此返回的值不是客户完整的NLS_LANG设置。 [LINK]。
至于为什么"如果改变了env的值。变量然后它不可见" - 检查上面答案的粗体部分。
干杯
答案 1 :(得分:0)
由于可以在代码运行之前加载Oracle库或创建连接,因此您不应该在代码中设置Oracle环境变量,因为结果不是确定性的。