LoginSignup
1
0

More than 1 year has passed since last update.

mySQLで日本語入力できなくて詰まった

Last updated at Posted at 2023-02-03

結論

文字コードが原因でした。
原因はすぐにわかっても解消に時間を要したので備忘録

詰まった流れ

文字コードの事は何も意識せず、WSL2のUbuntuに入れたmySQLで
CREATE DATABASE
CREATE TABLE
まで行い、INSERTしようとしたら、

ERROR 1366 (HY000): Incorrect string value: '\xE5\x8C\x97\xE6\xB5\xB7...

とエラーを吐きました。

SHOW VARIABLES LIKE 'chara%';
を実行することで、文字コードを見れるとのことなので、確認

mysql> show variables like 'chara%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

character_set_database | latin1
となっているのは期待値ではありません。
期待値は
character_set_database | utf8

設定ファイルをいじる

# vi /etc/mysql/mysql.conf.d/mysqld.cnf

最下部に以下を追記

[character-set-server=utf8mb4]

二つ目、こちらもいじる

vi /etc/mysql/my.cnf

同様に最下部に以下を追記

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
[mysqld]
character-set-server=utf8

また詰まる

前出の2つの設定ファイルを編集後、再起動

# service mysql stop
# service mysql start

mysqlに接続して
再度確認

mysql> 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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

お。期待値どおりやん。
と思い、INSERT文発行したら、同様のエラーを吐かれました。
そして、再度show variables like 'chara%';を実行すると、
character_set_database | latin1
へと逆戻り。なにこれ、、、
quitして、mySQLを再起動かけてもダメ。
色々と調べた結果、既にDBやテーブルが存在すると反映されないみたいです。

解決

設定ファイルをいじったあと、既に作成したDBが残っていると反映されないみたいです。

DROP文大量発行タイムです。
自分が作成した、DBをすべて削除したら、quitして、再起動。
DBを作成してみます。

> CREATE DATABASE hoge DEFAULT CHARACTER SET utf8;
> use hoge;
> 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       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

と見事解決。

結論

  • mysqlをinstallしたら最初に文字コードの確認やりましょう。
  • 既に以前の文字コードで作成されたDBがあると、反映されません

ということでした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0