2017-04-05 81 views
2

我想連接我的Oracle SQL,並且已經設置了utf8, ,但是當我選擇或插入某些內容時仍然出現亂碼。如何在PDO OCI中設置UTF8 // PHP

這裏是我的代碼:

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

如何解決這個問題呢?

回答

1

你不能通過修改連接字符串來做到這一點,因爲這不被支持。

由於記錄了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_TAIWAN.UTF8" 「在「envvars中'在XAMPP下的文件,然後解決問題! –