ここから質問投稿すると、最大4000ポイント当たる!!!! >>

学校で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になっていませんでした。
どうしてなんでしょうか?

どなたか解答のほどよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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を実行する事も可能。まあ、どのようなサーバ環境でも使えるようにするには、すべての文字列フィールドに文字コードを指定しなきゃいけないですから、使う必要ありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/04/03 14:31

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


人気Q&Aランキング