teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

暫定解決策を記述

2018/07/14 13:16

投稿

tanat
tanat

スコア18778

answer CHANGED
@@ -1,7 +1,80 @@
1
- 自分で試したことは無いんですが、windowsのコマンドプロンプト、powershellって標準文字コードがShiftJIS(厳密にはcp932?)だと思われるので、UTF-8なDBに入力したら文字化けしそうな気がします。
1
+ ~~自分で試したことは無いんですが、windowsのコマンドプロンプト、powershellって標準文字コードがShiftJIS(厳密にはcp932?)だと思われるので、UTF-8なDBに入力したら文字化けしそうな気がします。~~
2
2
 
3
+ ↑だめでした。
4
+
3
5
  [参考](https://qiita.com/FmtWeisszwerg/items/ccd34acfb2e88c2fb35f)
4
6
  `chcp 65001`
5
7
  で文字コードをUTF-8に変えてみるとどうなりますか?
6
8
 
7
- XAMPP for linux とかだったら見当違いな回答なので、OSも追記してみて下さい。
9
+ XAMPP for linux とかだったら見当違いな回答なので、OSも追記してみて下さい。
10
+
11
+ **追記**
12
+ 以下の方法で解決できますが、アプリケーション側で問題が起きそうな気がするので、おとなしくutf8をまともに扱えるクライアント(MySQL WorkbenchとかWindows Subsystem for Linuxのbashとか)からコマンドを発行するのをお勧めします。
13
+
14
+ 原因は恐らく、
15
+ 1. コマンドプロンプト+windows用MySQLクライアントの環境ではutf8が正しく扱えないこと
16
+ 2. xamppのコントロールパネルから呼び出させるコマンドプロンプトは若干挙動が違う様で、コマンドプロンプトで通用する方法が通じないこと
17
+
18
+ の二つです。
19
+ 以下の解決方法では
20
+ 1. コマンドプロンプトでは無理にutf8を扱おうとしない
21
+ 2. xamppのshellは使わない
22
+
23
+ という方向性で行っています。
24
+
25
+ **解決方法**
26
+
27
+ 1. my.iniを修正してクライアント周りの文字コードをcp932に戻します。
28
+ 現在[client]のあたりに`default-character-set=utf8`となっている部分があるはずなので`default-character-set=cp932`に変更
29
+
30
+ 2. MySQLを再起動します。
31
+ 3. Win+r → cmd でコマンドプロンプトを起動
32
+ 4. `c:\xampp\mysql\bin\mysql.exe -u root` でMySQLのにログイン
33
+ 5. 文字コードを確認
34
+ ```
35
+ MariaDB [(none)]> show variables like '%char%';
36
+ +--------------------------+--------------------------------+
37
+ | Variable_name | Value |
38
+ +--------------------------+--------------------------------+
39
+ | character_set_client | cp932 |
40
+ | character_set_connection | cp932 |
41
+ | character_set_database | utf8 |
42
+ | character_set_filesystem | binary |
43
+ | character_set_results | cp932 |
44
+ | character_set_server | utf8 |
45
+ | character_set_system | utf8 |
46
+ | character_sets_dir | C:\xampp\mysql\share\charsets\ |
47
+ +--------------------------+--------------------------------+
48
+ 8 rows in set (0.00 sec)
49
+
50
+ ```
51
+
52
+ 6 データの入力と確認
53
+ ```
54
+
55
+ MariaDB [(none)]> use sampledb;
56
+ Database changed
57
+ MariaDB [sampledb]> INSERT INTO member(last_name,first_name,age) VALUES('田中','一郎',21);
58
+ Query OK, 1 row affected (0.00 sec)
59
+
60
+ MariaDB [sampledb]> select * from member;
61
+ +----+-----------+------------+------+
62
+ | id | last_name | first_name | age |
63
+ +----+-----------+------------+------+
64
+ | 1 | ?c?? | ???Y | 21 |
65
+ | 2 | ?? | ?? | 21 |
66
+ | 3 | ?? | ?? | 21 |
67
+ | 4 | ?c?? | ???Y | 21 |
68
+ | 5 | 田中 | 一郎 | 21 |
69
+ | 6 | ?c?? | ???Y | 21 |
70
+ | 7 | 田中 | 一郎 | 21 |
71
+ | 8 | 田中 | 一郎 | 21 |
72
+ | 9 | 田中 | 一郎 | 21 |
73
+ | 10 | 田中 | 一郎 | 21 |
74
+ | 11 | 田中 | 一郎 | 21 |
75
+ +----+-----------+------------+------+
76
+ 11 rows in set (0.00 sec)
77
+
78
+ ```
79
+
80
+ *最後の行以外は他の方法(PHPスクリプトからやMySQL Workbenchから)正しく入力したデータなので、正しく動いているであろうと判断しました。