Как установить кодировку UTF8 в pdo oracle(oci)


Вот мои 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
  2. ИСПОЛЬЗОВАТЬ ТОЛЬКО pdo, а не oci_connect
  3. НЕ перезагрузить мой хост-компьютер
Author: KaKa, 2017-08-08

1 answers

Мне требуется 4 часа, чтобы решить эту проблему:

  1. Измените файл /etc/sysconfig/httpd командой vim /etc/sysconfig/httpd
  2. Добавьте коды ниже в конце этого файла

    export LD_LIBRARY_PATH=/app/oracle/orahome/lib
    export ORACLE_HOME=/app/oracle/orahome
    export NLS_LANG=AMERICAN_AMERICA.UTF8 
    
  3. перезапустить apache по команде service httpd restart

Вам не нужно НИЧЕГО делать с вашими pdo или oracle или host machine. Если вы не знаете значение переменной, просто введите echo $ORACLE_HOME в командной строке.

КСТАТИ,

Все эти три переменные должны быть заданы в /ect/profile, и вам лучше сделать их одинаковыми в этих двух файлах.

 0
Author: KaKa, 2017-08-08 05:09:11