• 締切済み

ローカル環境で文字化けというか。

お世話になってます。 文字化けに関するトピックは結構あり、解決策もかなりあるのですが、イマイチ自分の環境とは異なり、いろいろ試してみましたが解決しないので改めて質問させていただきます。 WinXPでmysql 5.0 phpMyAdminを入れて、クエリの中に2バイト文字(カナ、漢字すべて)を含めると下記のエラーが返ってきます。 #1406 - Data too long for column 'cname' at row 1 このとき入力した項目は"あ"で、varchar64に設定してあるcnameからいわせると入らないわけないので、おそらく文字コードの問題だと思います。 PHPMYADMINの文字コードはUTF8unicodeで、これがどうやってもSHIFT-JISにならない。 cfg[DefaultLang]="ja-sjis"になってるし、mysql側のmy.iniにも [client] default-character-set=sjis [mysql] default-character-set=sjis [mysqld] default-character-set=sjis にしてc:\WINDOWS直下においてるのですが、まだやり残してることがあるのでしょうか。 解決策何かありませんでしょうか。

みんなの回答

  • hirosa-ok
  • ベストアンサー率72% (8/11)
回答No.2

ExcelでADOを利用してレコードをテーブルにINSERTするときに、まったく同じエラーが発生しました。やはり、フィールドにマルチバイトの文字列を設定しています。 かなり悩んだのですが、データベースの接続後、 set character set sjis を発行したら、そのあと問題なくINSERTできました。 プログラミング環境は異なりますが、参考になれば。

回答No.1

以下を確認&試行してみてください。 1.MySQL側の確認 (1)文字コードは間違いなくSJISになっているか? MySQL Command Line Clientを起動し、「status」と入力。 →すべてSJISになっているか? もしなっていなら、コンフィグ設定がされていないのかも? http://www.dbonline.jp/mysqlinstall/install/index2.html (2)phpMyAdmin側の設定 バージョンにより、設定方法が異なるようです。 config.inc.phpに以下の変更、追加を行ってください。 $cfg['DefaultLang'] = 'ja-sjis'; $cfg['Lang'] = 'ja-sjis'; $cfg['DefaultCharset'] = 'SHIFT_JIS'; (3)それでもうまく行かなければ、最初にphpMyAdminから、最初に「set names sjis」を入力してください。

nyalio
質問者

補足

回答ありがとうございます。 statusではすべてsjisでした。 config.inc.phpでは、DefaultCharsetがeuc-jpになっていたのでsjisになおしましたが、変わらず。 $chk['Lang']を追加するとエラーになったので削除しました。 phpMyAdminからset names sjisでクエリを出してみましたがやはり変わらず。 むぅ。どうしたら・・・ 上記に描いたエラーの全文。マルチバイトになったことで引用符が閉じていないと判断されている様子。 エラーここから---- SQL にエラーがあります。MySQL サーバーは以下のようにエラーを出力しました。そこには問題を解決する手助けがあるでしょう。 ERROR: 引用符が閉じていません。 @ 56 STR: ' SQL: INSERT INTO `category` (`cid`, `cname`) VALUES ('2', '') 実行した SQL: INSERT INTO `category` (`cid`, `cname`) VALUES ('2', '') MySQLのメッセージ: #1406 - Data too long for column 'cname' at row 1 エラーここまで---- このエラーを見る限りでは文字化けではなくnull扱いにされてますね。。。 nullでクエリを出すか、あるいはマルチバイトでなければクエリは成功します。 ちなみに、phpMyAdminは2.8.2.4です。

関連するQ&A