Как установить кодировку 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??
И я хочу:
- НЕ изменять кодировку в базе данных oracle
- ИСПОЛЬЗОВАТЬ ТОЛЬКО pdo, а не oci_connect
- НЕ перезагрузить мой хост-компьютер
1 answers
Мне требуется 4 часа, чтобы решить эту проблему:
- Измените файл
/etc/sysconfig/httpd
командойvim /etc/sysconfig/httpd
-
Добавьте коды ниже в конце этого файла
export LD_LIBRARY_PATH=/app/oracle/orahome/lib export ORACLE_HOME=/app/oracle/orahome export NLS_LANG=AMERICAN_AMERICA.UTF8
- перезапустить apache по команде
service httpd restart
Вам не нужно НИЧЕГО делать с вашими pdo
или oracle
или host machine
.
Если вы не знаете значение переменной, просто введите echo $ORACLE_HOME
в командной строке.
КСТАТИ,
Все эти три переменные должны быть заданы в /ect/profile
, и вам лучше сделать их одинаковыми в этих двух файлах.