LoginSignup
12
21

More than 5 years have passed since last update.

MySQL8.0で文字コードを変更する方法(UTF8対応)

Last updated at Posted at 2018-11-06

概要

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%";を確かめてみると

default_setting.png

デフォルトのエンコード(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サーバの再起動をします。

サーバ再起動.png

タスクマネージャー > サービス タブより。

最後に、テーブルのデータを再作成して完了。(各自入れたいデータを入れなおしてください。)

mysql上で文字コードを確認してみると、無事に変更されています。

変更後.png

絵文字などに対応する必要がある場合(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

参考

12
21
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
12
21