我想连接我的Oracle SQL并且已经设置了utf8, 但是当我选择或插入某些东西时,仍然会出现乱码。
这是我的代码:
define("DB_HOST", "(DESCRIPTION =(ADDRESS = (PROTOCOL=TCP)
(HOST= IP)
(PORT=1521))
(CONNECT_DATA=(SID=IETDB)));
charset = utf8
");
如何解决这个问题?
答案 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);