質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • SQL

    2328questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Eclipse

    1641questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • 文字コード

    200questions

    文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Eclipseで文字化けです。

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 692

RyomaMinagi

score 19

Eclipseで取ってきたデータベースの日本語が文字化けします。

データベースはMySQLを使用しており、.cnfというファイルも見つからず、unicodeを追加しても何ら変わりはありません。

どうしたらよろしいでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 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/ これが結果となっております。

    キャンセル

回答 1

checkベストアンサー

0

修正依頼のコメントで下記のように文字コードがセットされているということを教えていただきました。
MySQLのUTF-8は下記を見てわかるように現状、2種類の文字コードが混在しています。

MySQLのマニュアルを見て頂くとわかると思いますが、utf8utf8mb4では文字コードの取り扱い方が異なっていますので、文字コードを揃えなければいけません。
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

基本的な文字コードの変更方法は下記のようになります。

  1. 設定ファイルで文字コードを設定
  2. MySQLサーバー再起動
  3. テーブルの文字コードを変更

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.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • SQL

    2328questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • Eclipse

    1641questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • 文字コード

    200questions

    文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。