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

时间:2017-04-05 02:32:50

标签: php pdo utf-8 oci

我想连接我的Oracle SQL并且已经设置了utf8, 但是当我选择或插入某些东西时,仍然会出现乱码。

这是我的代码:

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

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您无法通过修改连接字符串来执行此操作,因为不支持该字符串。

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);