character_set_serverがutf8に変更できずハマったのでまとめ。
はじめに
個人的にMySQLサーバを使いたくて試していたら、文字コードの変更が必要でした。
※文字コードを変更しないと、日本語データを投入した際にエラーが出ます。
/etc/my.cnf
を書けば良いらしいのですが、うまくいきませんでした。
結論
設定ファイルの場所が違いました。
Ubuntuを使用しており、その場合/etc/my.cnf
は存在せず、/etc/mysql/my.cnf
を設定すれば良かった。
Ubuntu で MySQL
前提条件
- Ubuntu 18.04LTS
- MySQL Server 5.7
設定確認
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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 | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.08 sec)
mysql>
|
設定
/etc/mysql/my.cnf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#
# The MySQL database server configuration file.
#
# ~~中略~~
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
# 以下を追記
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
skip-character-set-client-handshake
[mysqldump]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
|
※あれこれ調べてる内に、MySQLのutf8はUTF-8じゃないらしいと知ったので、新たに作られたutf8mb4を設定した。
設定値は以下あたりを参考に。
設定後、MySQLの再起動を行う。
sudo systemctl restart mysql
事後確認
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>
|
collation-serverはテーブル作った後に確認できるもよう
MySQLで照合順序を確認する方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
mysql> use test;
Database changed
mysql>
mysql> create table posts (
-> id int unsigned primary key auto_increment,
-> title varchar(255),
-> body text,
-> created datetime default current_timestamp,
-> updated datetime default current_timestamp on update current_timestamp
-> );
Query OK, 0 rows affected (0.05 sec)
mysql>
mysql> SHOW TABLE STATUS FROM test \G
*************************** 1. row ***************************
Name: posts
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: 1
Create_time: 2020-05-09 15:58:49
Update_time: NULL
Check_time: NULL
Collation: utf8mb4_bin
Checksum: NULL
Create_options:
Comment:
1 row in set (0.01 sec)
mysql>
|
余談
ディストリビューションによって設定ファイルの場所が違うかも、と思い至るのに大分時間を食いました。
当たり前といえば当たり前なのかもしれませんが、まだまだ知らない事も多く…
MySQL公式のDocker環境では、設定ファイルが元々無くても、生成すれば何事もなく変更できたので、Ubuntuも同じだろうと思ってました。