php連線oracle設定字符集,避免亂碼

2021-06-18 11:50:23 字數 1934 閱讀 6827

不寫了,我直接帖上它處的方法:我也就是用了這種方法解決了php連線oracle亂碼的問題。我開始的方法是用mysqli_query($link,$sql),這個函式只能支援php連線mysql的資料庫的讀取編碼轉換:

資料庫用oracle,當php連線oracle的時候,最好指定字符集。

查php手冊,oci_connect的第四個引數為charset,這是關鍵。

首先獲取oracle的字符集,執行「select * from v$nls_parameters;」,變數nls_characterset對應的就是我們需要的字符集,比如我這裡就是「zhs16gbk」。所以,最終的php**為:

php** 

$c1= oci_connect(

"scott"

, "tiger"

, $db

, 'zhs16gbk'

);  

[php]view plain

copy

print?

$c1= oci_connect(

"scott"

, "tiger"

, $db

, 'zhs16gbk'

);  

我本地的php檔案統一用utf-8,所以,獲取的**還要經過如下編碼轉換:

php** 

while

($dat

= oci_fetch_row(

$cur

))   

[php]view plain

copy

print?

while

($dat

= oci_fetch_row(

$cur

))   

--------------------------------

2009-6-25 更新以下文字

--------------------------------

同事說,oracle可以按照 客戶端指定的字符集 提供資料。也就是說,如果我本地php檔案用utf-8,那麼,我在oci_connect的時候,直接指定utf-8就行了,連編碼轉換都省了。

php** 

$c1= oci_connect(

"scott"

, "tiger"

, $db

, 'utf8'

);  

[php]view plain

copy

print?

$c1= oci_connect(

"scott"

, "tiger"

, $db

, 'utf8'

);  

另外,有個奇怪的問題:前面編碼轉換的iconv在測試機環境正常,但是傳到遠端就不能正常解析了,後來換成了mb_convert_encoding就可以了,**如下:

php** 

$nickname

= mb_convert_encoding(

$dat

[0], 

'utf-8'

, 'gbk'

);  

[php]view plain

copy

print?

$nickname

= mb_convert_encoding(

$dat

[0], 

'utf-8'

, 'gbk'

);  

可能原因在於iconv裡面的第二個引數是否加了「//ignore」,請參考

。有興趣的,可以試試,我就不試了

上面的方法沒有研究太多,我就是受到啟發後,去php官方又去看了oci_connect的作用,它的第四個引數就是設定讀取oracle資料庫編碼的。

PHP遠端連線oracle

系統 windows 2003 sp1 環境 php5.20 apache 2.0.59 資料庫為 oracle8i 執行在192.168.1.2這台伺服器上。1 在php的配置檔案php.ini中,取消extension php oci8.dll的注釋。還有一行為extension php ora...

PHP 設定MySQL連線字符集的方法

mysql set charset 這個函式是這樣用的 mysql set charwww.cppcns.comset utf8 link 成功返回 true,失敗返回 false。就這麼簡單。下面是p程式設計客棧hp手冊原文 this is the preferred way to change ...

設定MyEclipse連線Oracle資料庫

2.7.1 設定myeclipse連線oracle資料庫 為在myeclipse中設定連線oracle資料庫,在eclipse中選擇window show view other myeclipse database db browser選項。右擊db browser檢視的空白部分,選擇new選項,如...