- ベストアンサー
SQLで日本語データを入力したいのですが。
PHP5、MySQL5を使用しています。最近始めたばかりで参考書を購入して勉強しています。 購入した参考書には「PHPとMySQLの連携」という章があり読んでいくと、MySQL(コマンドライン)に日本語が表示されていました。 この本はMyAdminなどを使っていないので、PHPでフォームを作成してそれで日本語をMySQLに送信しているのだと思いやってみたのですが、データが入りません。英数字なら入るのですが、日本語になると入ってくれません。 設定が悪いのでしょうかそれとも私の書き方がいけないのでしょうか。 $ins = "INSERT INTO name VALUES('あじあ')"; $mq = mysql_query($ins); このように書いたのですができませんでした。すみませんが、よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 エラー出力はどうなっていますか? echo mysql_error(); > カラム型はVARCHARにしてあります。 カラム長は大丈夫ですよね?マルチバイト文字ですので注意して下さい。 > クライアントの文字コードというと、METAタグで設定しているやつですか?? METAタグで指定するのは出力したときのブラウザに対してです。 PHPの文字コードは、 1. PHPファイルの文字コード(エディタで指定) 2. PHPの内部文字コード(php.ini等の環境設定の他、mb_internal_encoding()で指定可能) 3. いま扱っている文字コード(ファイル内で書いている場合は1.で指定したエンコード、DBから引っ張ってきたり、フォームで送信された場合はそこで指定された文字コード) 4. HTMLを出力するときの文字コード(先ほどのMETAタグ等で指定するものです) 等があります。いっぽう、MySQLでは、 1. サーバの基本文字コード(サーバの設定) 2. 記録する(されている)文字のエンコード(実際に記録しているデータのエンコード、必ずしも1と一致している訳ではありません) 3. クライアントの文字コード(PHPから取り扱う場合は1.のファイルの文字コードや2.の内部文字コードを指定します) 等があります。 うまく行っている場合はどうってことありませんが、うまく行かない場合はこれらの文字コードを意識しないといけません。 mb_inernal_encoding()、mb_detect_encoding()、mb_convert_encodign()等で指定したり検出したりしてみてください。
その他の回答 (2)
- taketan_mydns_jp
- ベストアンサー率58% (450/773)
> $ins = "INSERT INTO name VALUES('あじあ')"; > $mq = mysql_query($ins); クエリはこれで大丈夫だと思います。 mysql_errorでエラーを確認してみて下さい。 echo mysql_error(); ところでnameのカラムの型は何になっていますか?int型等、テキストが入らない型になっている可能性が高いですが。 また、環境によってはMySQL5では接続時にクライアントの文字コードをセットする必要があるかもしれません。 mysql_query("SET NAMES sjis");//SJISの場合 のようなクエリをまず発行しなければならない可能性もあります。 参考まで。
- seegrammar
- ベストアンサー率25% (253/974)
MySQL の Default Char Set が sjis になっているか、と insert into name (カラム名) value(' .... '); だったように思います。
お礼
ご回答ありがとうございます。 SHOW VARIABLES LIKE 'CHAR%'で調べたところ、sjisになっていました。Sjisではだめなのでしょうか?
お礼
ご回答ありがとうございます。 カラム型はVARCHARにしてあります。クライアントの文字コードというと、METAタグで設定しているやつですか?? 初歩的で申し訳ありません。