前提・実現したいこと
MySQL(MariaDB)での日本語の文字化けを解消したいです。
ネットに載っている解決法を色々試しましたが、お手上げ状態なのでこの環境での解決策をご教示いただけると助かります。
###環境
Windows10
XAMPP 7.2.6
MySQL Ver 15.1 Distrib 10.1.33-MariaDB, for Win32
※SQL文はコマンドプロンプトで打ち込んでいます
発生している問題・エラーメッセージ
コマンドプロンプトからSQL文でINSERTすると日本語のみ文字化けする。
SQL
1MariaDB [testdb]> insert into test(name,skill)values('みき','HTML'); 2 3MariaDB [testdb]> select* from test; 4+----+------+-------+ 5| id | name | skill | 6+----+------+-------+ 7| 1 | ・ン・ォ | HTML | 8+----+------+-------+
試したこと
①まずはDBの文字コード設定を確認。
SQL
1MariaDB [testdb]> show variables like "chara%"; 2+--------------------------+--------------------------------+ 3| Variable_name | Value | 4+--------------------------+--------------------------------+ 5| character_set_client | cp932 | 6| character_set_connection | cp932 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | cp932 | 10| character_set_server | utf8 | 11| character_set_system | utf8 | 12| character_sets_dir | C:\xampp\mysql\share\charsets\ | 13+--------------------------+--------------------------------+
DBの設定
SQL
1MariaDB [testdb]> show create database testdb; 2+----------+-----------------------------------------------------------------+ 3| Database | Create Database | 4+----------+-----------------------------------------------------------------+ 5| testdb | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8 */ | 6+----------+-----------------------------------------------------------------+
テーブルの設定
SQL
1MariaDB [testdb]> desc test; 2+-------+-------------+------+-----+---------+----------------+ 3| Field | Type | Null | Key | Default | Extra | 4+-------+-------------+------+-----+---------+----------------+ 5| id | int(11) | NO | MUL | NULL | auto_increment | 6| name | varchar(20) | YES | | NULL | | 7| skill | varchar(20) | YES | | NULL | | 8+-------+-------------+------+-----+---------+----------------+
②https://qiita.com/YusukeHigaki/items/2cab311d2a559a543e3aを参考に、my.iniの[client]と[mysqld]の文字コードをutf8に書き換え。
DBの設定を確認しましたが、文字コードの設定が最初と変わっていなかったので、
③my.ini[mysql]のdefault-set-characterもutf8に書き換え。
DBの設定
SQL
1MariaDB [(none)]> show variables like "chara%"; 2+--------------------------+--------------------------------+ 3| Variable_name | Value | 4+--------------------------+--------------------------------+ 5| character_set_client | utf8 | 6| character_set_connection | utf8 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | utf8 | 10| character_set_server | utf8 | 11| character_set_system | utf8 | 12| character_sets_dir | C:\xampp\mysql\share\charsets\ | 13+--------------------------+--------------------------------+
この状態で新たにDB作成し、INSERT
SQL
1MariaDB [(none)]> create database test2; 2 3MariaDB [test2]> create table table1(id int auto_increment,name varchar(20),skill varchar(20),index(id)); 4 5MariaDB [test2]> insert into table1(name,skill)values('みき','PHP'); 6 7MariaDB [test2]> select* from table1; 8+----+------+-------+ 9| id | name | skill | 10+----+------+-------+ 11| 1 | ?ン・? | PHP | 12+----+------+-------+
これでもダメだったので、
④https://teratail.com/questions/26559を参考に、
my.iniの[mysql]default-character-setをcp932に書き換え。
DB設定
SQL
1MariaDB [(none)]> show variables like "chara%"; 2+--------------------------+--------------------------------+ 3| Variable_name | Value | 4+--------------------------+--------------------------------+ 5| character_set_client | cp932 | 6| character_set_connection | cp932 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | cp932 | 10| character_set_server | utf8 | 11| character_set_system | utf8 | 12| character_sets_dir | C:\xampp\mysql\share\charsets\ | 13+--------------------------+--------------------------------+
設定が元通りなので意味ないと思うが、この状態で再度DB作成してINSERT
SQL
1MariaDB [(none)]> create database test3; 2MariaDB [test3]> create table table3(id int,name varchar(20),skill varchar(20)); 3MariaDB [test3]> insert into table3(id,name,skill)values(1,'みき','CSS'); 4 5MariaDB [test3]> select* from table3; 6+------+------+-------+ 7| id | name | skill | 8+------+------+-------+ 9| 1 | ・ン・ォ | CSS | 10+------+------+-------+
④https://teratail.com/questions/58424を参考にset namesしてみた
SQL
1MariaDB [(none)]> set names cp932; 2 3MariaDB [(none)]> create database newone; 4MariaDB [newone]> create table tbl3(id int,name varchar(10),skill varchar(10)); 5MariaDB [newone]> insert into tbl3(id,name,skill)values(1,'みき','HTML'); 6 7MariaDB [newone]> select* from tbl3; 8+------+------+-------+ 9| id | name | skill | 10+------+------+-------+ 11| 1 | ・ン・ォ | HTML | 12+------+------+-------+
これでもダメだったので、もうお手上げ状態です…。
どこをどう変えたらよいのでしょうか…
###整理
状況を整理すると、
- DBの文字設定全てutf9にしても直らない
- 文字設定の中で[character_set_client],[character_set_connection],[character_set_results]がcp932でも直らない
- ご質問に対して
1.どんな感じで文字化けしているか?
→日本語が「 ・ノ・・」「 ・・・B・E・ォ・・」のようになります。
2.プログラムは何を使ってデータを呼び出そうとしているか?
→データの呼び出し・挿入は全てコマンドプロンプト上で行っています。
ということになっています。
ご教示いただけると幸いです。
###追記
ご回答をいただき、以下を試してみました。
- 文字コードを「utfmb4」に設定した
SQL
1MariaDB [(none)]> show variables like "chara%"; 2+--------------------------+--------------------------------+ 3| Variable_name | Value | 4+--------------------------+--------------------------------+ 5| character_set_client | utf8mb4 | 6| character_set_connection | utf8mb4 | 7| character_set_database | utf8 | 8| character_set_filesystem | binary | 9| character_set_results | utf8mb4 | 10| character_set_server | utf8 | 11| character_set_system | utf8 | 12| character_sets_dir | C:\xampp\mysql\share\charsets\ | 13+--------------------------+--------------------------------+ 14 15MariaDB [test1]> create table test2(id int,name varchar(20))default charset=utf8mb4; 16 17MariaDB [test1]> insert into test2(id,name)values(1,'みき'); 18 19MariaDB [test1]> select* from test2; 20+------+------+ 21| id | name | 22+------+------+ 23| 1 | ?ン・? | 24+------+------+
- 文字コードをsjisに設定した
参照:https://teratail.com/questions/153238
SQL
1MariaDB [test3]> SET character_set_results = sjis; 2MariaDB [test3]> SET character_set_client = sjis; 3 4MariaDB [test3]> create table test2(id int,name varchar(20))default charset=sjis; 5MariaDB [test3]> insert into test2(id,name)values(1,'みき'); 6 7MariaDB [test3]> select* from test2; 8+------+------+ 9| id | name | 10+------+------+ 11| 1 | ??? | 12+------+------+
参考にしたURL
https://teratail.com/questions/135821
https://teratail.com/questions/124308
https://teratail.com/questions/153238
https://qiita.com/deco/items/bfa125ae45c16811536a
回答5件
あなたの回答
tips
プレビュー