• 締切済み

mysqlの文字化けについてです

学校でjavaの勉強をしている者です。 初心者です。 学校の宿題をやるために、自宅でmysqlをインストールしたのですが、 javaで実行すると文字化けしてしまいます。 学校では、my.iniの中の [mysql] default-character-set=latin1 を [mysql] default-character-set=sjis と変更し、 [mysqld] default-character-set=latin1 を [mysqld] default-character-set=sjis skip-character-set-client-handshake と変更し、 SQLを再起動すれば解決すると習ったのですが、 文字化けが起こってしまいます。 show variables like '%char%'で文字コードを確認してみたところ、 | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | このように、sjisになっていませんでした。 どうしてなんでしょうか? どなたか解答のほどよろしくお願いします。

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

>SQLを再起動すれば解決すると習ったのですが、 大ウソを教えられたか、正しく覚えていないのか。 どちらにしても、講師の方の理解が不足しているのは、おそらく間違いないでしょう。 10年程前は、ネットで取れる日本語のMySQLの解説では確かにそのような、default-character-set=sjisを指定するべしという嘘(というよりも理解不足)がまかり通っていましたが。 default-character-set=sjis の【default】の部分に注目しましょう。 テーブル作成時(より正確にはフィールド作成時)に文字コード(character-set)が省略された場合に、SJISで作成すると指定しただけです。 変わっていないのは当たり前で、default-character-setを変更しても、既に作成されたテーブルの文字コードが変化するワケはありません。 default-character-set=sjisに変更したのであれば、一旦データベースを削除して、再度同じ手順でテーブルを作成すればsjisで作成されますよ。 さて、ここからが講師の方の理解不足についての説明 さっき書いたように、 default-character-set=sjisは、文字コードが省略された場合のデフォルトの文字コードの指定です。 それなら、データベースやテーブル作成時に文字コードを省略しなきゃイイジャン。 f_text VARCHAR(255) CHARACTER SET sjis NOT NULL たとえば、CREATE TABLEでフィールドを指定する際に、上記のようにCHARACTER SET sjisを付ければ、default-character-setがなんであろうがsjisで作成されます。 ※万一のミスの際でも問題が起こらないように、default-character-setを指定しておくのはありですが、default-character-setをあてにして文字コードを指定しないのはよろしくない。 ※CREATE DATABASE時点で、データベースに対してDEFAULT CHARACTER SET sjisを実行する事も可能。まあ、どのようなサーバ環境でも使えるようにするには、すべての文字列フィールドに文字コードを指定しなきゃいけないですから、使う必要ありません。

mm_chair0
質問者

お礼

丁寧なご説明ありがとうございました! 無事文字化けが解決しました。

関連するQ&A