我想连接我的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);