Dalam pembangunan PHP, pangkalan data adalah pautan yang tidak dapat dielakkan. Oracle ialah sistem pengurusan pangkalan data hubungan biasa (RDBMS), yang juga mempunyai sokongan lanjutan yang sepadan dalam PHP. Tetapi kadangkala kita menghadapi beberapa masalah pelik, seperti aksara bercelaru apabila mengeluarkan bahasa Cina dalam Oracle.
Masalah ini biasanya disebabkan oleh ketidakpadanan antara set aksara Cina dan set aksara pelayan Oracle. Apabila anda memasukkan data Cina ke dalam Oracle, Oracle akan menggunakan set aksaranya sendiri secara lalai, iaitu set aksara AL32UTF8
. Jika set aksara lalai yang digunakan oleh skrip PHP anda ialah GBK
, maka aksara Cina akan bercelaru dalam Oracle. Jadi, kita perlu membuat beberapa tetapan untuk menyelesaikan masalah ini.
Nota: Semua operasi berikut perlu dilakukan dengan keistimewaan pentadbir.
Pertama, kita perlu menyemak set aksara yang disokong oleh Oracle. Buka klien Oracle dan sambungkan ke pangkalan data yang ingin kami kendalikan. Gunakan pernyataan SQL berikut untuk menanyakan set aksara yang disokong:
select * from nls_database_parameters where parameter like '%CHARACTERSET';
Jika anda menggunakan Oracle 11g dan ke atas, anda perlu melaksanakan pertanyaan berikut:
select * from v$nls_parameters where parameter like '%CHARACTERSET';
Anda akan melihat set hasil , yang mengandungi semua set aksara yang disokong oleh Oracle. Kita perlu menukar set aksara kepada GBK
.
Dalam Oracle, set aksara disusun mengikut tempat dan ID charset. Kita perlu mengubah suai set aksara apabila tempat adalah SIMPLIFIED CHINESE_CHINA
dan pengecam set aksara ialah ZHS16GBK
. Laksanakan pernyataan SQL berikut:
alter system set NLS_CHARACTERSET='ZHS16GBK' scope=spfile;
Perintah ini akan mengubah suai fail parameter (spfile) pelayan pangkalan data Oracle dan menukar set aksara kepada GBK
. Mulakan semula perkhidmatan Oracle untuk pengubahsuaian berkuat kuasa.
Seterusnya, kita perlu mengubah suai set aksara kepada GBK
dalam PHP. Dalam PHP, kita boleh menggunakan fungsi iconv_set_encoding()
untuk mengubah suai set aksara.
Kami boleh mengubah suai set aksara lalai PHP dalam fail permulaan PHP (php.ini). Cari dua baris berikut:
;default_charset = ;iconv.input_encoding =
Tukarnya kepada:
default_charset = "GBK" iconv.input_encoding = "GBK"
Supaya PHP akan menggunakan set aksara GBK
secara lalai.
Jika tapak web anda disediakan menggunakan pelayan web seperti Apache, anda juga boleh mengubah suai set aksara PHP dalam fail konfigurasi pelayan web. Tambahkan arahan berikut pada fail konfigurasi Apache:
php_value default_charset "GBK" php_value iconv.input_encoding "GBK"
Simpan dan mulakan semula perkhidmatan Apache.
Sekarang mari kita uji sama ada tetapan kami berkuat kuasa.
Buat fail PHP baharu test.php
dan masukkan kod berikut:
<?php $conn = oci_connect('用户名', '密码', '地址/SID'); $sql = "SELECT * FROM 表名 WHERE ROWNUM < 10"; $stmt = oci_parse($conn, $sql); oci_execute($stmt); while ($row = oci_fetch_array($stmt, OCI_ASSOC)) { echo "<pre class="brush:php;toolbar:false">"; var_dump($row); echo ""; } ?>
Selepas melaksanakan fail, kita akan melihat output data Cina biasa pada skrin.
Apabila mengendalikan pangkalan data Oracle dalam PHP, aksara Cina bercelaru adalah masalah yang lebih sukar. Dengan mengubah suai set aksara Oracle dan PHP, kami boleh menyelesaikan masalah ini.
Perlu diingatkan bahawa tetapan yang terlibat dalam artikel ini hanyalah salah satu kaedah. Dalam aplikasi praktikal, kita perlu memilih penyelesaian yang sesuai mengikut situasi tertentu.
Atas ialah kandungan terperinci Bagaimana untuk menetapkan set aksara Oracle kepada gbk dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!