Eclipseで文字化けです。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 2,111
Eclipseで取ってきたデータベースの日本語が文字化けします。
データベースはMySQLを使用しており、.cnfというファイルも見つからず、unicodeを追加しても何ら変わりはありません。
どうしたらよろしいでしょうか?
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
修正依頼のコメントで下記のように文字コードがセットされているということを教えていただきました。
MySQLのUTF-8は下記を見てわかるように現状、2種類の文字コードが混在しています。
MySQLのマニュアルを見て頂くとわかると思いますが、utf8
とutf8mb4
では文字コードの取り扱い方が異なっていますので、文字コードを揃えなければいけません。
https://dev.mysql.com/doc/refman/5.6/ja/charset-unicode-utf8mb4.html
※ MySQLマニュアルより
utf8 という名前の文字セットは、文字あたり最大 3 バイトを使用し、BMP 文字だけを含みます。utf8mb4 文字セットは、文字ごとに最大 4 バイトを使用し、補助文字をサポートします。
character_set_client utf8mb4
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8mb4
character_set_server utf8
character_set_system utf8
文字化けしている場所をHEX()
を使ってSELECTしてみるとわかりやすいかもしれません。
SUBSTR()
で1文字切り出した文字が「?」になっているとして、これをHEX()
で文字コードを調べることができます。
mysql> SELECT SUBSTR(SUBカラム名, 0, 1), HEX(SUBSTR(SUBカラム名, 0, 1)) FROM テーブル名
DB再構築が可能であれば、文字コードを揃えてテーブルを作り直すと文字化けしません。
utf8からutf8mb4へ文字コード変換方法
DBを再構築することが難しければ、けっこう面倒ですが変換することも可能です。
InnoDBのフォーマットを初期設定のAntelope
からBarracuda
にしたい場合は下記のサイトが参考になります。
http://qiita.com/kenjiszk/items/56f0fa58fba84b686401
http://qiita.com/hatappi/items/132f56c00e428beef777
基本的な文字コードの変更方法は下記のようになります。
- 設定ファイルで文字コードを設定
- MySQLサーバー再起動
- テーブルの文字コードを変更
MySQLの設定ファイルmy.cnf
を探します。ない場合は作成します。
MySQLのデーターベースバイナリログファイルの置き場所が/var/lib/mysql
だとすると、このディレクトリに/var/lib/mysql/my.cnf
のように作成します。
既に設定ファイルがある場合は、[mysqld]の下に追記して、[client]も同様に追記します。
[mysqld]
character-set-server=utf8mb4 #これが追記する設定
[client]
default-character-set=utf8mb4 #これが追記する設定
my.cnf
を変更または、作成保存したらMySQLを再起動します。
そして、コマンドラインで下記SQLを実行して変換します。
#書式
ALTER TABLE テーブル名 MODIFY カラム名 型 character set utf8mb4;
#例
ALTER TABLE test_tbl MODIFY column1 VARCHAR(16) character set utf8mb4, MODIFY column2 INT character set utf8mb4;
下記はテーブルの初期文字コードをutf8mb4
に変更します。
ALTER TABLE テーブル名 DEFAULT character set utf8mb4 COLLATE utf8mb4_general_ci;
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 90.00%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
Tomak
2017/09/13 02:26
サーバー環境を教えてほしいです。Windows10+XAMPPなど。それからMySQLクライアントやコマンドラインから接続した場合は文字化けしないのでしょうか?「mysql> show variables like '%char%';」のSQLコマンドの結果も教えてほしいです。
RyomaMinagi
2017/09/13 11:14
ありがとうございます。MacOS + Tomcat9.0サーバーで、上記の場合では文字化けはしませんでした。character_set_client utf8mb4 character_set_connection utf8 character_set_database utf8 character_set_filesystem binary character_set_results utf8mb4 character_set_server utf8 character_set_system utf8 character_sets_dir /Applications/MAMP/Library/share/charsets/ これが結果となっております。