如何在PDO OCI中设置UTF8 // PHP

问题描述:

我想连接我的Oracle SQL,并且已经设置了utf8, ,但是当我选择或插入某些内容时仍然出现乱码。如何在PDO OCI中设置UTF8 // PHP

这里是我的代码:

define("DB_HOST", "(DESCRIPTION =(ADDRESS = (PROTOCOL=TCP) 
          (HOST= IP) 
          (PORT=1521)) 
          (CONNECT_DATA=(SID=IETDB))); 
          charset = utf8 
    "); 

如何解决这个问题呢?

你不能通过修改连接字符串来做到这一点,因为这不被支持。

由于记录了oci_connect手册页上,第四个参数指定的字符集:

oci_connect($username, $password, $connection_string, 'UTF-8'); 

这告诉OCI期待您提供UTF8格式的字符串,并在UTF8提供结果集,从数据库字符集转换。从手册:

确定Oracle客户端库使用的字符集。字符集不需要与数据库使用的字符集匹配。如果不匹配,Oracle将尽最大努力将数据转换为数据库字符集和从数据库字符集转换数据。根据字符集的不同,这可能无法提供可用的结果。转换也会增加一些时间开销。

如果未指定,Oracle客户端库将根据NLS_LANG环境变量确定字符集。

通过此参数可以减少连接所需的时间。

如果您使用PDO_OCI的字符集可以附加到DSN,再次as documented

new \PDO('oci:dbname=' . $conn_string . ';charset=UTF8', $username, $password); 
+0

谢谢回答,我插入 “出口NLS_LANG =” 传统CHINESE_*.UTF8" “在“envvars中'在XAMPP下的文件,然后解决问题! –