Linux下php程序通过oci8和本地的oracle client远程查询服务器端的信息,通过程序返回的文字结果是问号。当使用sqlplus链接远程数据库,返回的文字信息正确。
系统环境 Linux Redhat, Oracle instant client 11g, PHP5.4 , apache2.
数据库链接代码 $conn = oci_connect('username', 'password', 'database');在sqlplus中,使用 select * from V$NLS_PARAMETERS Where PARAMETER='NLS_LANGUAGE'; 得到的结果是 KOREAN在/etc/init.d/httpd 文件中,已经加入了 export NLS_LANGUAGE=KOREAN,并且重新启动了apache,结果依然是问号。请问大家如何解决?

解决方案 »

  1.   

    NLS_LANG参数由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characterset>   
        NLS_LANG各部分含义如下:
        LANGUAGE指定: -Oracle消息使用的语言
                        -日期中月份和日显示
        TERRITORY指定: -货币和数字格式
                        -地区和计算星期及日期的习惯
        CHARACTERSET: -控制客户端应用程序使用的字符集如果 Language 不能成功的转换成 Clients Characterset 那么就会出现问号
      

  2.   

    我修改成了 KOREAN.UTF-8  还是不行
      

  3.   

    问题是你的表中存储的是韩语的内容吗?
    不是很清楚 oracle 是否有指定二进制方式的写法,有如mysql的BINARY
    如果有,可先以二进制方式读回来分析分析
      

  4.   


    版主,有没有可能是oracle instant client 11g需要设置字符集编码?
      

  5.   

    如能以二进制方式取回数据,那么数据就是原生态的
    你用 mb_detect_encoding 就可探测出他的字符集是什么
      

  6.   


    Linux 的oracle client是使用rpm包安装的,我没有做过任何的设置。默认应该是英语。这个我明白,如果要支持多字节的,需要设置一下。我想可能是这里出了问题。 linux下的oracle如果设置,是在哪里呢?我也百度一下找找。mb_detect_encoding 执行完了,没有任何返回值,而且后面的代码也不运行了。但是 没有php报错信息。
      

  7.   


    自己搞定了!会韩语是多么的重要!!!(我不会 = =!)http://www.xelloss.pe.kr/236
    $conn = oci_connect('user_name', 'pwd', 'test_db', 'AL32UTF8');但愿对需要的人能提供帮助。