- ベストアンサー
MySQL4.1以上で、機種依存文字、特殊文字を扱うにはどうしたらよいの?
クライアントの文字コードをsjisにした状態で aというテーブルに、機種依存文字「キロ」を以下のようなクエリでいれようとした場合。 insert into a values("キロ") ; サーバ側の文字コードがUTF-8では、以下のようなエラーが出てインサートできません。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"?")' at line 1 サーバ側の文字コードをsjisにした場合は、上記のようなエラーは出ずにインサートできるのですが、文字化けします。 機種依存文字、特殊文字をデータベースで扱うにはどうするのが一般的なのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私はPHPもSQLも勉強し始めてまだ数ヶ月です。 この為、SQLの常識をよく判らず、UTF-8で作ったデータベースにSJISのデータを格納した結果ソートが変になる等の不具合が発生した経験があるのですが… 前置きが長くなりましたが、その際に(文字コードの問題と気づかないまま)解決する為に取った手段が流用出来そうなので紹介します。 ・URLエンコードして、エンコードをデータベースに格納する。 つまり、「あ」という文字をデータベースに入れるのではなく、『%82%a0』とコード化した文字列をデータベースに入れます。 利点: ・PHPの文字コードだけ意識すれば操作できる。(=DBの文字コードを無視出来る) ・特殊文字や機種依存文字も %+16進数 で表すので問題なく利用出来る。 ・ユーザー入力を格納する場合でも、エンコードしてからデータベースに渡すので、セキュリティ上優位。 欠点: ・全ての操作において一々エンコード・デコードが必要になる。 ・データが3倍の6バイト(SJISの場合)になる。 と、サーバーの負担が増加しますが、小規模のデータベースなら活用出来ると思います。 なお、最初に書いたようにPHP・SQLとも勉強を始めて数ヶ月(かつ独学+教材=ウェブ)ですので、一般的な方法は分かりません(^^;
その他の回答 (1)
- racchoman
- ベストアンサー率71% (20/28)
http://dev.mysql.com/doc/refman/4.1/ja/charset-cp932.html 試していませんが、クライアントのエンコーディングにcp932を指定したら大丈夫だと思います。