数年前から論文のネタとしてLAMP環境上でのアプリケーション開発をしようとしている。ところが、LAMP環境を作るのは簡単なのだが、その上での文字コードの整合性がとれない。
昨年はFedoraCore4の上で環境を作ったが、確かUTF-8の文字コードがどうにもうまく扱えず、とりあえずFedoraCore3に落としてEUCでアプリケーションを作った気がする。
今年は本腰をいれて、FedoraCore5の上でのLAMP環境で文字コードの整合性をとってアプリケーションを作ろうとしている。正確な環境は、
・Fedora Core 5
・apache 2.2.2-1.2
・php 5.1.4-1
・MySQL 5.0.22-1.FC5.1
である。今のところ、
・apacheのhttpd.confでは明示的にutf-8を指定しない。
・MySQLのmy.cnfでは明示的にutf-8を指定している。
という設定にしている。(そして、HTMLやPHPファイルはutf-8で作成して、指定もしている。)
---
まずは練習として「石田豊(著)MySQL入門以前(毎日コミュニケーションズ)」で、Windows上の環境でApache+PHP+MySQL環境を練習してうまくいった。それでこれを上述のFC5環境で試している。
1)上記環境で、HTMLやPHPファイルをShift-JISで作成・指定してデータの入力・表示を行う。
クライアントから入力は出来るが、表示すると少なくともカタカナ部分で文字化けを時々起こす。またサーバ上でMySQL内のデータを見てみると、完全に文字化けしている。また、クライアントからphpMyAdminでMySQLを見てみても、完全にデータ部分が文字化けしている。
2)MySQLのmy.cnfで明示的にsjisを指定して試してみる。
クライアントから入力は出来るが、表示すると全くすべてが文字化けしている。
3)再びMySQLのmy.cnfで明示的にutf-8に戻し、HTMLやPHPファイルをutf-8に変換して、コード指定もutf-8にする。
1)で文字化けしたカタカナ部分のデータもクライアントでは正しく表示される。しかし、サーバ上のMySQL内のデータを見ると、完全に文字化けしている。またクライアントからphpMyAdminでMySQLを見てみても完全にデータ部分が文字化けしている。
4)3)の状態で試しにサンプルデータをutf-8化してサーバ上でload dataしてみる。
サンプルでついていた「私立PDD図書館」の「人名辞典」をWindowsクライアント上でUTF-8にコード変換して、サーバにFTPし、MySQLで「load data infile 'jinmei.txt' into table nandemo;」を実行してみる。utf-8を指定したクライアント環境では全く文字化けしてしまう。しかし、サーバ上のMySQL内では文字化けせず正しくデータが読める。またクライアントからphpMyAdminでMySQLを見てみると、文字化けせずに正しいデータが入力されている。
---
さぁ、サーバ上のMySQLでも文字化けせずにデータが格納でき、クライアント上でもそれを文字化けせずに読めるためにはどうしたらよいのか?
でも、クライアント上のphpMyAdminが正しくMySQLデータを表示しているのだから、apache,PHP,MySQLの設定は間違っていないような気がするんだけどなぁ~。
このエントリーのトラックバックURL : http://www.yamalab.net/cgi-bin/mt/mt-tb.cgi/810