アプリ版:「スタンプのみでお礼する」機能のリリースについて

クライアントの文字コードを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にした場合は、上記のようなエラーは出ずにインサートできるのですが、文字化けします。
機種依存文字、特殊文字をデータベースで扱うにはどうするのが一般的なのでしょうか?

A 回答 (2件)

私はPHPもSQLも勉強し始めてまだ数ヶ月です。


この為、SQLの常識をよく判らず、UTF-8で作ったデータベースにSJISのデータを格納した結果ソートが変になる等の不具合が発生した経験があるのですが…

前置きが長くなりましたが、その際に(文字コードの問題と気づかないまま)解決する為に取った手段が流用出来そうなので紹介します。

・URLエンコードして、エンコードをデータベースに格納する。

つまり、「あ」という文字をデータベースに入れるのではなく、『%82%a0』とコード化した文字列をデータベースに入れます。

利点:
・PHPの文字コードだけ意識すれば操作できる。(=DBの文字コードを無視出来る)
・特殊文字や機種依存文字も %+16進数 で表すので問題なく利用出来る。
・ユーザー入力を格納する場合でも、エンコードしてからデータベースに渡すので、セキュリティ上優位。

欠点:
・全ての操作において一々エンコード・デコードが必要になる。
・データが3倍の6バイト(SJISの場合)になる。

と、サーバーの負担が増加しますが、小規模のデータベースなら活用出来ると思います。

なお、最初に書いたようにPHP・SQLとも勉強を始めて数ヶ月(かつ独学+教材=ウェブ)ですので、一般的な方法は分かりません(^^;
    • good
    • 1

http://dev.mysql.com/doc/refman/4.1/ja/charset-c …
試していませんが、クライアントのエンコーディングにcp932を指定したら大丈夫だと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!