PHP の開発において、データベースは避けられないリンクです。 Oracle は一般的なリレーショナル データベース管理システム (RDBMS) であり、PHP にも対応する拡張サポートがあります。しかし、Oracle で中国語を出力すると文字化けするなど、奇妙な問題が発生することがあります。
この問題は通常、中国語の文字セットと Oracle サーバーの文字セットの不一致によって発生します。中国語データを Oracle に挿入すると、Oracle はデフォルトで独自の文字セット (AL32UTF8
文字セット) を使用します。 PHP スクリプトで使用されるデフォルトの文字セットが GBK
である場合、Oracle では中国語の文字が文字化けします。したがって、この問題を解決するにはいくつかの設定を行う必要があります。
注: 以下の操作はすべて管理者権限で実行する必要があります。
まず、Oracle でサポートされている文字セットを確認する必要があります。 Oracle クライアントを開き、操作したいデータベースに接続します。次の SQL ステートメントを使用して、サポートされている文字セットをクエリします:
select * from nls_database_parameters where parameter like '%CHARACTERSET';
Oracle 11g 以降を使用している場合は、次のクエリを実行する必要があります:
select * from v$nls_parameters where parameter like '%CHARACTERSET';
次の内容を含む結果セットが表示されます。 Oracle がサポートするすべての文字セット。文字セットを GBK
に変更する必要があります。
Oracle では、文字セットはロケールと文字セット識別子 (文字セット ID) に編成されます。ロケールが SIMPLIFIED CHINESE_CHINA
で、文字セット識別子が ZHS16GBK
の場合、文字セットを変更する必要があります。次の SQL ステートメントを実行します。
alter system set NLS_CHARACTERSET='ZHS16GBK' scope=spfile;
このコマンドは、Oracle データベース サーバーのパラメータ ファイル (spfile) を変更し、文字セットを GBK
に変更します。変更を有効にするには、Oracle サービスを再起動します。
次に、PHP の文字セットを GBK
に変更する必要があります。 PHP では、関数 iconv_set_encoding()
を使用して文字セットを変更できます。
PHP の初期化ファイル (php.ini) で PHP のデフォルトの文字セットを変更できます。次の 2 行を見つけます。
;default_charset = ;iconv.input_encoding =
これらを次のように変更します。
default_charset = "GBK" iconv.input_encoding = "GBK"
このように、PHP はデフォルトで GBK
文字セットを使用します。
Web サイトが Apache などの Web サーバーを使用して設定されている場合は、Web サーバー構成ファイル内の PHP 文字セットを変更することもできます。 Apache 構成ファイルに次の指示を追加します。
php_value default_charset "GBK" php_value iconv.input_encoding "GBK"
Apache サービスを保存して再起動します。
次に、設定が有効かどうかをテストしましょう。
新しい PHP ファイル test.php
を作成し、次のコードを入力します。
<?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 ""; } ?>
ファイルを実行すると、通常の中国語データが画面に出力されます。
PHP で Oracle データベースを運用する場合、さらに厄介な問題となるのが中国語の文字化けです。 Oracle と PHP の文字セットを変更することで、この問題を解決できます。
この記事で説明する設定は方法の 1 つにすぎないことに注意してください。実際のアプリケーションでは、特定の状況に応じて適切なソリューションを選択する必要があります。
以上がPHPでOracleの文字セットをgbkに設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。