我有一個項目,從MYSQL遷移到ORACLE RAC中,資料庫為UTF8編碼格式,用PHP進行簡單串連取出的中文均為問號,百度後發現在進行資料庫連接時需要指定串連編碼為UTF8,我指定了環境變數,並在測試頁列印了PHP中全域環境變數,phpinfo(INFO_ENVIRONMENT),結果就正常了。如果不指定,PHP環境變數頁面沒顯示nls_lang的變數資訊,則依舊亂碼,現在有什麼辦法,我有好幾十個PHP頁面,難道都要手動在開頭PUTENV(NLS_LANG)定義一下麼。求高手賜招能夠在PHP服務運行時就內建環境變數nls_lang的參數。並自動在INFO_ENVIRONMENT顯示成功。
補充下,我是centos6.5,已經在.bash_profile中定義了nls_lang。但貌似不起作用。PHP是5.6,WEB伺服器是nginx 1.9
回複討論(解決方案)
ORACLE 沒有 utf8 只有 utf-8
你在連結 ORACLE 時就應聲明所用字元集
只有 ORACLE 8 及以下,才需要設定環境變數
ORACLE 沒有 utf8 只有 utf-8
你在連結 ORACLE 時就應聲明所用字元集
只有 ORACLE 8 及以下,才需要設定環境變數
您說的對,但是有沒有辦法設定預設字元集,即和JAVA那樣不在PHP連接字串中
$conn = OCI_Logon('orcl','orcl','127.0.0.1/orcl','UTF8');或者putenv("NLS_LANG=american_america,UTF8");
兩者都能夠正常。我現在就是想和JAVA那樣不用事先申明,因為我的TEST.PHP文本就是UTF8格式,資料庫也是UTF8格式,應該能夠自動匹配吧?
我手動輸出系統內容變數nls_lang,結果是空的,
phpinfo(INFO_ENVIRONMENT);
?>
求賜教如何才能在PHP初始化的時候裝載系統內容變數,換句話說如何指定PHP的環境變數,bash_profile不起作用。
寫成 $conn = OCI_Logon('orcl','orcl','127.0.0.1/orcl','UTF8'); 就那麼費事嗎?
java 是通過 jdbc 進行資料庫操作的,php 是通過用戶端的
所以後者要多做一些設定上的事情
額,其實這公司是別的軟體公司的產品,原生MYSQL,後來由於公司要求統一用ORACLE RAC資料庫,遷移過去的。。好吧我找找他們的資料庫連接是寫在哪的,自己改下算了。