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

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

ただいまの
回答率

90.01%

MariaDBのテーブルに日本語のデータがいれられません。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 5,476

kasotama

score 33

こんにちは。プログラミングを始めて2か月程度の初心者です。
今現在MariaDBのテーブルに日本語のデータを登録しようとしているのですが、????と表示されてしまい上手くいきません。調べてみたところデータベースの文字コードがおかしいのではないかと思い試してみましたが、すべてUTF-8になっているのにも関わらずやはりできませんでした。
英数字だけで登録する分には問題なのですが、日本語だとうまくいきません。

ソースコード

MariaDB [test]> show variables like 'character%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8                           |
| character_set_connection | utf8                           |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | utf8                           |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

INSERT INTO mylogin(addres,pass,name) VALUES('kato@gmail','kato123','加藤');
+------------+---------+------+
| address    | pass    | name |
+------------+---------+------+
| kato@gmail | kato123 | ???? |
+------------+---------+------+

MariaDB [test]> show table status;
+---------+--------+---------+------------+------+----------------+-------------
+-----------------+--------------+-----------+----------------+-----------------
----+-------------+------------+-----------------+----------+----------------+--
-------+
| Name    | Engine | Version | Row_format | Rows | Avg_row_length | Data_length
| Max_data_length | Index_length | Data_free | Auto_increment | Create_time
    | Update_time | Check_time | Collation       | Checksum | Create_options | C
omment |
+---------+--------+---------+------------+------+----------------+-------------
+-----------------+--------------+-----------+----------------+-----------------
----+-------------+------------+-----------------+----------+----------------+--
-------+
| mylogin | InnoDB |      10 | Compact    |    2 |           8192 |       16384
|               0 |            0 |         0 |           NULL | 2016-02-02 13:33
:54 | NULL        | NULL       | utf8_general_ci |     NULL |                |
       |
+---------+--------+---------+------------+------+----------------+-------------
+-----------------+--------------+-----------+----------------+-----------------
----+-------------+------------+-----------------+----------+----------------+--
-------+

補足情報(言語/FW/ツール等のバージョンなど)

MariaDBを使っています。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

+4

ターミナルが使用している文字コードがutf8でないため文字化けしています。
katomasaさんの場合、日本語(cp932)を入力しているのに、SQLはutf8を受け取ると設定しているので、思う通りに処理されないのだと思います。

SQLで日本語(cp932)を入力

character_set_client: SQLを実行する時の文字コード(utf8)

character_set_connection: この文字コードに変換(utf8)

character_set_results: 結果を返すときの文字コード(utf8)

表示(cp932)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/03 10:24

    わかりやすい解説ありがとうございます。
    コマンドプロンプトの設定をUTF-8に変えてみましたが、そうすると今度は日本語の入力自体ができなくなってしまいました。
    また、コマンドプロンプトから打ち込むのではなく、サーブレットからデータベースに接続して入力してみてもやはり文字化けとなってしまいました…

    キャンセル

  • 2016/02/03 13:07 編集

    上記回答で一部不適切だったと思う部分を削除しました。
    環境はWindowsですよね。ベストかは分かりませんが、以下にWindowsでのやり方を書いていきます。
    それと、文字コードの変更の仕方はご存じのようなので、割愛します。

    Windowsのコマンドプロンプトを使ってMariaDBと日本語をやり取りする場合、次の3つの文字コードをcp932にします。
    character_set_client
    character_set_connection
    character_set_results

    コマンドプロンプトでutf8を表示できるようにしても、katomasaさんのおっしゃる通り、日本語の入力ができなくなります。
    なので、上記の文字コードをcp932にすることで、入出力を日本語で行えるようにします。

    なお、MariaDBでの処理はutf8で行いたいので、上記3つ以外は、katomasaさんがご質問中に書いている文字コードのままとしてください。
    私も詳細は理解できていないのですが、上記3つがcp932で、他がutf8でも、うまい具合に変換してくれるようです。

    次に、MariaDBを再起動してから、データベースとテーブル、カラムをutf8指定で作成します。
    これは、次の3つがutf8なら指定しなくても自動的にutf8になります。
    character_set_database
    character_set_server
    character_set_system

    最後に、コマンドプロンプトからMariaDBにログインして、次のSQLを投げてみてください。
    INSERT INTO mylogin(addres,pass,name) VALUES('kato@gmail','kato123','加藤');

    キャンセル

  • 2016/02/03 17:19

    ありがとうございます!coba-cobaさんのおっしゃる通りの方法で解決できました!
    とても時間はかかってしまいましたが文字コードというものの勉強にもなり良い経験ができました。本当にありがとうございました!

    キャンセル

  • 2016/02/03 20:28

    2ヵ月でそれだけできてすごいですね。
    解決してよかったです。

    キャンセル

+1

MariaDBについては詳しくないのですが、
このあたり
など参考になりませんか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/03 12:58

    せっかく回答していただいたのに気づかなくてすみませんでした。
    そのページのことも昨日試してはいたんですが、それでも上手くいきませんでした。

    キャンセル

+1

MariaDBについては詳しくないのですが・・・
データベースへの入力はコンソールから行ってるのでしょうか?
character_sets_dirがC:\xampp\mysql\share\charsets\
ということはWindowsで走ってるんでしょうか?
データベースへ入力しているアプリケーションがSHIFT_JISを利用している可能性があります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/02/03 10:21

    そうだったみたいなのでコマンドプロンプトの設定をUTF-8にしてみましたが、今度は日本語を入力するとなぜかコマンドプロンプトが落ちてしまいました…

    キャンセル

  • 2016/02/03 14:06

    詳しくはないのですが、私もUTF-8表示はできても、UTF-8入力は諦めた経験があります・・・。

    MariaDBへcp932で入出力する方法をcoba-cobaさんが提示されているので、
    OBDCというアプローチを提示しようと思います。

    データベースに接続する際にODBCを経由することで、
    ACCESSやOpenOficeBase等のクライアントから接続することができます。
    正しく設定すればODBCが文字コード変換してくれます。
    OBDCがUTF-8に変換するのでMariaDBへUTF-8入出力できます
    他のPCからMariaDBへ接続する際にも活躍します。

    キャンセル

  • 2016/02/03 17:21

    わざわざほかのやり方も教えてくださってありがとうございました!こんな方法もあるのかとすごく勉強になりました!今回はcoba-cobaさんのやり方でできてしまいましたが、せっかくなので練習にこのやり方も試してみたいと思います。ありがとうございました!

    キャンセル

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

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる