Webエンジニアのメモ帳

技術的な話を中心に書いています。

【MariaDB】文字コードを変更する方法 (utf8 → utf8mb4)

MariaDBではデフォルトの文字コードがutf8となっていますが、これでは日本語を上手く扱うことができません。

そのため、utf8mb4に変更する必要があります。この記事では、その方法を説明します。

現状の文字コードを確認

以下のSQL文で確認できます。

MariaDB [(none)]> show variables like 'char%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

「utf8」と書れている場合は、文字コードがutf8になっています。

my.cnfを修正

viコマンドで/etc/my.cnfを開きます。

sudo vi /etc/my.cnf

以下を追記します。

[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4

MariaDBを再起動

上で行った設定を反映するため、MariaDBの再起動を行います。

sudo systemctl stop mariadb
sudo systemctl start mariadb

文字コードを再度確認

MariaDB [(none)]> 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/ |
+--------------------------+----------------------------+

文字コードがutf8mb4に変わっているはずです。

なお、character_set_systemに関してはutf8のままで問題ありません。

既存のデータベース、テーブルがある場合は設定を変更

最後に、すでにDBやテーブルを作成している場合は、データベースやテーブルの設定を変更する必要があります。

・DBの文字コード変更

MariaDB [(none)]> ALTER DATABASE {データベース名} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

・テーブルの文字コード変更

ALTER TABLE {テーブル名} CONVERT TO character SET utf8mb4 COLLATE utf8mb4_unicode_ci;

以上で、文字コードの設定は完了となります。