如何在pdo oracle(oci)中将字符集设置为UTF8

时间:2017-08-08 01:31:05

标签: php oracle pdo utf-8

这是我的php代码

$tns = "
 (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      )
        (CONNECT_DATA =
          (SERVICE_NAME = myservice)
      )
 )";
$conn = new PDO("oci:dbname=" . $tns, 'user', 'pass');

当我尝试将字符集设置为UTF8时:

$conn = new PDO("oci:dbname=" . $tns . ";charset=UTF8", 'user', 'pass');

会得到: ERROR: SQLSTATE[HY000]: OCINlsCharSetNameToId: unknown character set name (/app/software/php-5.6.30/ext/pdo_oci/oci_driver.c:610)pdo is NULL

我已经将NLS_LANG设置为AMERICAN_AMERICA.UTF8,但看起来我的主机需要重启,我现在不能这样做。

那么,我应该怎么做才能将字符集更改为utf8,并将pdo / oci连接到oracle数据库?

我想要:

  1. 修改oracle databse中的字符集
  2. 使用pdo,而不是oci_connect
  3. 重启我的主机

1 个答案:

答案 0 :(得分:1)

花了我4个小时来解决这个问题:

  1. 按命令/etc/sysconfig/httpd
  2. 修改vim /etc/sysconfig/httpd文件
  3. 在此文件的末尾添加以下代码

    export LD_LIBRARY_PATH=/app/oracle/orahome/lib
    export ORACLE_HOME=/app/oracle/orahome
    export NLS_LANG=AMERICAN_AMERICA.UTF8 
    
  4. 通过命令service httpd restart
  5. 重启apache

    您必须对pdooraclehost machine进行 NOTHING 。 如果您不知道变量的值,只需在命令行中echo $ORACLE_HOME

    顺便说一句,

    所有这三个变量都应该在/ect/profile中设置,你最好在这两个文件中使它们相同。