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

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

ただいまの
回答率

89.99%

MySQL(MariaDB)での日本語の文字化けを解消したい

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 1,590

shibuchaaaan

score 13

前提・実現したいこと

MySQL(MariaDB)での日本語の文字化けを解消したいです。
ネットに載っている解決法を色々試しましたが、お手上げ状態なのでこの環境での解決策をご教示いただけると助かります。

環境

Windows10
XAMPP 7.2.6
MySQL Ver 15.1 Distrib 10.1.33-MariaDB, for Win32
※SQL文はコマンドプロンプトで打ち込んでいます

発生している問題・エラーメッセージ

コマンドプロンプトからSQL文でINSERTすると日本語のみ文字化けする。

MariaDB [testdb]> insert into test(name,skill)values('みき','HTML');

MariaDB [testdb]> select* from test;
+----+------+-------+
| id | name | skill |
+----+------+-------+
|  1 | ・ン・ォ | HTML  |
+----+------+-------+

試したこと

①まずはDBの文字コード設定を確認。

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

 
DBの設定

MariaDB [testdb]> show create database testdb;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| testdb   | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-----------------------------------------------------------------+


テーブルの設定

MariaDB [testdb]> desc test;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int(11)     | NO   | MUL | NULL    | auto_increment |
| name  | varchar(20) | YES  |     | NULL    |                |
| skill | varchar(20) | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+

https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3aを参考に、my.iniの[client]と[mysqld]の文字コードをutf8に書き換え。
DBの設定を確認しましたが、文字コードの設定が最初と変わっていなかったので、

③my.ini[mysql]のdefault-set-characterもutf8に書き換え。

DBの設定

MariaDB [(none)]> show variables like "chara%";
+--------------------------+--------------------------------+
| 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\ |
+--------------------------+--------------------------------+

この状態で新たにDB作成し、INSERT

MariaDB [(none)]> create database test2;

MariaDB [test2]> create table table1(id int auto_increment,name varchar(20),skill varchar(20),index(id));

MariaDB [test2]> insert into table1(name,skill)values('みき','PHP');

MariaDB [test2]> select* from table1;
+----+------+-------+
| id | name | skill |
+----+------+-------+
|  1 | ?ン・?  | PHP   |
+----+------+-------+

これでもダメだったので、
https://teratail.com/questions/26559を参考に、
my.iniの[mysql]default-character-setをcp932に書き換え。

DB設定

MariaDB [(none)]> show variables like "chara%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | cp932                          |
| character_set_connection | cp932                          |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | cp932                          |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

設定が元通りなので意味ないと思うが、この状態で再度DB作成してINSERT

MariaDB [(none)]> create database test3;
MariaDB [test3]> create table table3(id int,name varchar(20),skill varchar(20));
MariaDB [test3]> insert into table3(id,name,skill)values(1,'みき','CSS');

MariaDB [test3]> select* from table3;
+------+------+-------+
| id   | name | skill |
+------+------+-------+
|    1 | ・ン・ォ | CSS   |
+------+------+-------+


https://teratail.com/questions/58424を参考にset namesしてみた

MariaDB [(none)]> set names cp932;

MariaDB [(none)]> create database newone;
MariaDB [newone]> create table tbl3(id int,name varchar(10),skill varchar(10));
MariaDB [newone]> insert into tbl3(id,name,skill)values(1,'みき','HTML');

MariaDB [newone]> select* from tbl3;
+------+------+-------+
| id   | name | skill |
+------+------+-------+
|    1 | ・ン・ォ | HTML  |
+------+------+-------+

これでもダメだったので、もうお手上げ状態です…。
どこをどう変えたらよいのでしょうか…

整理

状況を整理すると、

  • DBの文字設定全てutf9にしても直らない
  • 文字設定の中で[character_set_client],[character_set_connection],[character_set_results]がcp932でも直らない
  • ご質問に対して
    1.どんな感じで文字化けしているか?
    →日本語が「 ・ノ・・」「 ・・・B・E・ォ・・」のようになります。
    2.プログラムは何を使ってデータを呼び出そうとしているか?
    →データの呼び出し・挿入は全てコマンドプロンプト上で行っています。

ということになっています。
ご教示いただけると幸いです。

追記

ご回答をいただき、以下を試してみました。

  • 文字コードを「utfmb4」に設定した
MariaDB [(none)]> show variables like "chara%";
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8                           |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8                           |
| character_set_system     | utf8                           |
| character_sets_dir       | C:\xampp\mysql\share\charsets\ |
+--------------------------+--------------------------------+

MariaDB [test1]> create table test2(id int,name varchar(20))default charset=utf8mb4;

MariaDB [test1]> insert into test2(id,name)values(1,'みき');

MariaDB [test1]> select* from test2;
+------+------+
| id   | name |
+------+------+
|    1 | ?ン・?  |
+------+------+
MariaDB [test3]> SET character_set_results = sjis;
MariaDB [test3]> SET character_set_client = sjis;

MariaDB [test3]> create table test2(id int,name varchar(20))default charset=sjis;
MariaDB [test3]> insert into test2(id,name)values(1,'みき');

MariaDB [test3]> select* from test2;
+------+------+
| id   | name |
+------+------+
|    1 | ???  |
+------+------+

参考にしたURL

https://teratail.com/questions/135821
https://teratail.com/questions/124308
https://teratail.com/questions/153238
https://qiita.com/deco/items/bfa125ae45c16811536a

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • shibuchaaaan

    2019/04/10 19:22

    文字コードをsjisにすると、入れた日本語は「????」となります。見えないですね…。

    キャンセル

  • FKM

    2019/04/10 20:29

    そこから設定すべきです。Mysqlの問題以前かも知れません。
    https://qiita.com/user0/items/a9116acc7bd7b70ecfb0

    キャンセル

  • shibuchaaaan

    2019/04/11 12:02

    なるほど…!これは知りませんでした。ありがとうございます。
    コマンドプロンプトの文字コードはShift-JISだったのですが、そのままだと何も変わらなかったのでUTF8に変えたところ、ちゃんと表示されました!
    鞭ですみません…。
    皆様、本当にありがとうございました。

    キャンセル

回答 5

+2

MysqlをXAMPPで動かしたいが日本語が文字化けして直らない
に同様と思われる内容の回答していますので参照してみてください

シェルの文字コードがsjisであることが原因だと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/10 10:44

    ありがとうございます。
    リンクの通り試してみましたが、直りませんでした…。
    試した結果を追記で載せております。自分の方でも色々調べてみます。

    キャンセル

  • 2019/04/10 11:19

    MariaDB [test3]> create table test2(id int,name varchar(20))default charset=sjis;

    のときの、default charset=sjisは無くてよいと思います。
    あくまでシェルがsjisなので、表示だけsjisにすることが目的です。

    キャンセル

  • 2019/04/10 19:23

    なるほど!ありがとうございます。
    default charset=sjis無しで作ってみましたが、同様に文字化けしたままでした。

    キャンセル

+2

似たような症状の記事があったので、こちらをお試しになってみては?
(既に試されていたら申し訳ない。)
MariaDB 10.1.31とMySQL 8.0.11の文字化け対策
Windows xammp環境のMYSQL文字化け

また操作しているターミナルをgit-bash等々に変えてみてやってみるとう試しては如何でしょうか。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/10 19:24

    ありがとうございます!明日、試してみます。

    キャンセル

  • 2019/04/11 11:52

    試してみましたが、変わりませんでした…。ターミナルを変えてみるほうが良いかもしれません。

    キャンセル

check解決した方法

+1

FKMさんより、コマンドプロンプトでsjis自体が文字化けしている事に対して

そこから設定すべきです。Mysqlの問題以前かも知れません。
https://qiita.com/user0/items/a9116acc7bd7b70ecfb0

とコメントいただき、コマンドプロンプト自体の文字コードをUTF8に変更(テーブルの文字コードがUTF8であるため)したら無事直りました!

# chcp
現在のコード ページ: 932

chcp 65001
Active code page: 65001
MariaDB [trainingdb]> select* from userprofile;
+--------+--------------+-----------+-----------------+---------------+
| userid | name         | bloodtype | origin          | skill         |
+--------+--------------+-----------+-----------------+---------------+
|      6 | みき         | O型       | 九州・沖縄      | HTML,CSS,     |
|      7 | miki         | O型       | 九州・沖縄      | HTML,CSS,PHP, |
|      8 | みき         | A型       | 神奈川県        | HTML,CSS,     |
+--------+--------------+-----------+-----------------+---------------+

皆様ありがとうございました。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

DBを作成する時にエンコードを指定しない場合、my.cnfのエンコードを参照します。
クライアントとデータベース側の文字エンコードを設定したうえで、
MySQLサービス再起動してからやってみればうまくいくと思います。

参考例
https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3a

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/10 10:02

    ありがとうございます。
    この参考URLの通りにmy.iniで文字エンコード設定変更→MySQL再起動をしたのですがうまくいかず…他の方の方法も試してみます。

    キャンセル

+1

utf8ではなく、utf8mb4 に変更したらどうなりますか?
MySQLの文字コードをutf8mb4に変更

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/04/10 10:15

    リンク先と同じようにutf8mb4に変更しても、同じように文字化けしてしまいました…。
    他の方法も試してみます!
    ありがとうございます。

    キャンセル

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

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