##問題点
CentOS 7にMicrosoft ODBC Driver for SQL Serverをインストールし、PDOにてSQL Serverへの接続を試みていますが、マルチバイト(日本語)の文字列を送信すると文字化けが発生してしまいます。
##環境
環境は下記の通りです
・CentOS Linux release 7.6.1810
・WindowsServer 2012 SQL Server 14
・PHP 7.3.6
・Apache/2.4.6 (CentOS)
##症状
LinuxのWebサーバーから、WindowsのSQL Serverへ接続し、データの取得、更新を行う環境下において、SELECTを実行する際にWhere句内に日本語が含まれると、Latin-1に文字列が変換された状態でSQL Serverに送信されてしまいます。
Linuxにターミナルでログインし、コマンドライン上から同様のクエリを実行したときにはこの現象は発生せず、Apache経由で実行した場合のみこの症状が発生します。
はじめは、queryやexecでINSERTやUPDATEを実行した場合にも同様の症状が見られ、文字化けした状態でDBに格納されてしまう症状がありましたが、こちらはprepareを行い、executeを実行する形式に変える事で解消しました。
※この場合もコマンドラインからの実行の場合は文字化けしませんでした。
尚、php5.6とfreeTDS+unixODBC を用いた場合には問題なく動作していました。
##考えうる可能性
現在、prepareを実行する形でこの症状を回避していますが、そもそもの根本的な原因がしりたく、質問させて頂きました。
設定の見直しをしながら試行錯誤していますが、解決に至っていません。
現段階で考えている可能性を下記に記します。
###・Microsoft ODBC Driver for SQL ServerとMicrosoft SQL Server 用 Drivers for PHPのインストールの問題
Microsoft SQL Server 用 Drivers for PHP について、yumでのインストールのマニュアルの記載がありますがPHP自体をソースからビルドしてインスト―ルしているため、この手順をスキップしています。
これが原因ではないかとも思っていますので、完全に推奨される手順で構築された、最小限のwebサーバー環境で実験してみようかと考えています。
###・SQL Server(Windows)側の問題
そもそもに、Windowsサーバー側の問題かなとも思っています。
##憶測
文字コードの変換等は一通り試したかと思いますが、最終的にはこの「コマンドラインからは問題ないのに、Apache経由で実行した場合にだけ発生する」という点がヒントではないかと思っています。Apache側のphpモジュールが正しくないなどの問題ではないか予測しています。
同一の症状に見舞われ、解決に至った経験のある方がいれば、ご教授頂ければ幸いです。
回答1件
あなたの回答
tips
プレビュー