概要
MySQL8.0で文字コードの設定をしようとする時、それまでのバージョン(7.x以前)とは少し設定ファイル(my.ini)と内容が異なるので紹介します。
環境
- Windows10
- MySQL 8.0.12
(LinuxOSの場合、my.iniを/etc/my.cnf
に置き換えて読めば同様にできるかもしれません。)
文字コードの設定全体をcp932からutf8に置き換えるまで
utf8で書かれたsqlファイルを読み込むのをデフォルトにするためにMySQL側の文字コードを変更することに。
既存のバージョンだと、以下の2箇所を変更するのが普通です。
(インストーラのデフォルト設定だとC:\ProgramData\MySQL\MySQL Server 8.0
以下にあるmy.ini
に記載されています。)
[mysqld]
default-character-set=utf8
## ...中略...
character-set-server=utf8
本来であれば、これでMySQL80サービスをタスクマネージャー > サービス タブ
から再起動するだけでいけますが、
mysqlを起動してshow variables like "chara%";
を確かめてみると
デフォルトのエンコード(cp932)のままです。
色々と調べた結果、下記のUTF8の設定をmy.ini
に手動で入れる必要があることがわかりました。
## UTF 8 Settings
init-connect='SET NAMES utf8'
collation_server=utf8_unicode_ci
character_set_server=utf8
skip-character-set-client-handshake
これを[mysqld]
と書かれている直後に配置します。
(mysqldはMySQLサーバのことです)
アンダーバー(_
)とハイフン(-
)の違いが煩雑ですが、これで合っているようです。
ここまで終わったらMySQL80
サーバの再起動をします。
タスクマネージャー > サービス タブ
より。
最後に、テーブルのデータを再作成して完了。(各自入れたいデータを入れなおしてください。)
mysql上で文字コードを確認してみると、無事に変更されています。
絵文字などに対応する必要がある場合(4bitのUTF-8問題)
参考までに、sql読み込み時に下記のようなwarningが出る場合
Incorrect string value: '\xF0\xA6\x9A\xB0\xE7\x94...' for column 'name' at row 1
utf8
で設定した場所をutf8mb4
に設定しなおすことでうまくいくことがあります。(MySQL5.5.3以降)
utf8mb4
とはUTF-8を4バイトの文字コードで扱うための設定です。
UTF-8 は1~4バイトで1文字が構成される文字コードですが、MySQLではutf8
の設定では4バイトのUTF8が扱えません。
utf8mb4
で設定すると絵文字なども登録できるようになります。
今から新規で設定するならutf8mb4
のほうが良さげです。
↓設定例
## UTF 8 mb4 Settings
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake