Php 如何在pdo oracle(oci)中将字符集设置为UTF8
这是我的php代码Php 如何在pdo oracle(oci)中将字符集设置为UTF8,php,oracle,pdo,utf-8,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
$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');
将获得:
错误:SQLSTATE[HY000]:OCINlsCharSetNameToId:未知字符集名称(/app/software/php-5.6.30/ext/pdo_oci/oci_driver.c:610)pdo为空
我已经将NLS_LANG设置为AMERICAN_AMERICA.UTF8
,但我的主机需要重新启动,我现在无法执行
那么,当pdo/oci连接到oracle数据库时,我应该怎么做才能将字符集更改为utf8
我想:
我花了4个小时来解决这个问题:
/etc/sysconfig/httpd
export LD_LIBRARY_PATH=/app/oracle/orahome/lib
export ORACLE_HOME=/app/oracle/orahome
export NLS_LANG=AMERICAN_AMERICA.UTF8
service httpd restart
pdo
或oracle
或主机
,您不必做任何事。
如果您不知道变量的值,只需在命令行中echo$ORACLE\u HOME
顺便说一句
所有这三个变量都应该在
/ect/profile
中设置,最好在这两个文件中设置相同的变量。您的Oracle DB是什么版本的?您可能需要使用AL32UTF8
insteadOracle版本为11g<代码>$conn=new-PDO(“oci:dbname=”.$tns.“charset=AL32UTF8”,“user”,“pass”)代码>获得相同的错误。注意,“UTF8”字符集对于UCSE-8编码是一个误称。真正的UTF-8是字符集“AL32UTF8”,但只要使用unicode BMP,它们就完全相同。它也将适用于PDO_OCI。如果您使用php fpm,请注意,PDO_OCI会受到php fpm“buglet”的影响,它会阻止php在初始化PDO_OCI之前读取php fpm配置文件,请参阅我没有使用php fpm
,无论如何感谢~@ChristopherJonesSame从crontab运行时出现的问题:在我的情况下,解决方案是将环境变量ORACLE_HOME设置为crontab内部或任务指令之前的export。谢谢