LinuxサーバでPHPからOracleデータベースに接続するときの文字化けの解消方法を探している方へ
PHPからOracleデータベースに接続するとブラウザ上で文字化けしてしまう
PHPからOracleデータベースに接続して取得した内容をブラウザ上に表示したいが、
文字化けしてしまうので解消方法をを知りたい、と考えていませんか?
PHPからOracleデータベースに接続するときの文字化けの対処方法を紹介します
本記事では、下記の内容を解説します。
この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。
前提(今回の環境)
項目 | データベースサーバ | WEB-APサーバ(PHP-Apache) |
---|---|---|
OS | Oracle Linux 7.8 | CentOS 8.1 |
サーバ名 | SV-PLUTO | SV-NEPTUNE |
DB | Oracle 19c | - |
PHP | - | PHP 7.2 |
WEB | - | Apache 2.4 |
文字コード | NLS_LANG= Japanese_Japan.JA16SJISTILDE |
Apacheの実行ユーザーの.bash_profile の環境変数 NLS_LANG= Japanese_Japan.AL32UTF8 |
DBサーバと、WEB/APサーバの2台構成にしているシステムを想定しています。
WEB/APサーバには、以下の記事の手順で「OCI8」をインストールしてあります。
oci_connectのDSNの書き方
https://www.php.net/manual/ja/function.oci-connect.php
character_set
Oracle クライアントライブラリが使う文字セットを指定します。 これは、データベースが用いる文字セットと一致させる必要はありません。 一致していない場合は、Oracle が最善を尽くしてデータベースの文字セットとの間の変換を行います。 文字セットによっては、この変換結果がうまく使えないこともあります。 また、変換にはそれなりの時間を要します。省略した場合は、 Oracle クライアントライブラリは環境変数
NLS_LANG
の値をもとに文字セットを判断します。このパラメータを渡すことで、 接続に要する時間を短縮できます。 PHPマニュアル>関数リファレンス>データベース関連>ベンダー固有のモジュール>OCI8>OCI8関数>oci_connect
上記のPHPマニュアルによると、
データベースが用いる文字セットと一致させる必要はありません。
一致していない場合は、Oracle が最善を尽くしてデータベースの文字セットとの間の変換を行います。
だそうです。
character_setを指定しない場合
oci_connect($username,$password,$connection_string)
<?php $con = oci_connect($username,$password,$connection_string);
character_setを指定しないと、「????」と表示されてしまいました
character_setを「JA16SJISTILDE」にした場合
oci_connect($username,$password,$connection_string,'JA16SJISTILDE')
<?php $con = oci_connect($username,$password,$connection_string,'JA16SJISTILDE');
character_setを「JA16SJISTILDE」にしたら、完全に文字化けして表示されてしまいました
character_setを「AL32UTF8」にした場合
oci_connect($username,$password,$connection_string,'AL32UTF8')
<?php $con = oci_connect($username,$password,$connection_string,'AL32UTF8');
character_setを「AL32UTF8」にしたら、正しく表示することができました!
結果まとめ
character_set | 表示結果 |
---|---|
指定なし | ???? |
JA16SJISTILDE | 完全に文字化け |
AL32UTF8 | 正しく表示 |
オラクルデータベースのおススメの勉強法の紹介
私は、某SIerに勤務しながら、入社以来10年以上、オラクルデータベースを使用したシステムに関わる仕事をしています。
オラクルデータベースについて、仕事場以外でも勉強をしたい、おススメの勉強法を知りたい、と考えている方のために、
①おすすめの書籍と、②おすすめのオンライン学習サイト、
を紹介します。
働きながら勉強するための、おススメの書籍とオンラインで学習できるサイトの紹介です
オラクルデータベースの勉強ができるおススメ書籍
朝の通勤時や帰宅時の電車の中や、社外打合せへの移動中などに勉強するなら、やはり書籍が一番だと思います。
Oracleの基本 ~データベース入門から設計/運用の初歩まで
技術エキスパートとして認定されたOracle ACEの渡部亮太さんの書かれた本です。
https://twitter.com/wrcsus4twitter.com
本書では、Oracle初心者/新人エンジニアが押さえておくべき知識とスキルを、現場で活躍するOracleエンジニアたちが、わかりやすく丁寧に解説。
Oracleの使い方はもちろん、データベースの基礎知識から、データ操作のためのSQL、テーブル設計、データベース運用/管理の基礎までしっかり押さえ、実務で使える入門スキルを身につけられます。
Oracleを学びたいすべての人に最適な入門書です。
Oracleの基本 ~データベース入門から設計/運用の初歩まで |
プロとしてのOracleアーキテクチャ入門【第2版】
もう1冊、こちらもOracle ACEの渡部亮太さんの書かれた本です。
本書は、Oracle Databaseのアーキテクチャ(内部構成)について解説した入門書です。 本書の内容を理解することで「Oracleの動作の仕組み」を本質的に理解することができます。 これからOracleを使用する初心者の方から、実際にシステムの開発や運用管理を行っている DBエンジニアやシステムエンジニアの方を対象としています。
プロとしてのOracleアーキテクチャ入門【第2版】(12c、11g、10g 対応) 図解と実例解説で学ぶ、データベースの仕組み (Oracle現場主義) |