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



我想连接我的Oracle SQL并且已经设置了utf8, 但是当我选择或插入某些内容时,仍然有乱码文本。

这是我的代码:

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,同样如所述:

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

最新更新