Cloud9にインストールしたMySQL(MariaDB)はデフォルト設定だと日本語などのマルチバイト文字の取り扱いができません。以下の手順でMariaDBの文字コード設定を変更できます。

  1. 現状の文字コード設定を確認する
  2. /etc/my.cnf ファイルで文字コード設定を変更する
  3. データベースを再構築する

1. 現状の文字コード設定を確認する

MySQL(MariaDB)に接続して現状の文字コード設定を確認しましょう。まずはMySQLにログインします。

$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.2.38-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

次に以前に作成していた eldb に接続して show コマンドを使って文字コードの設定を確認します。

MariaDB [(none)]> use eldb;
Database changed
MariaDB [eldb]> 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/mariadb/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0.01 sec)

出力の中に latin1 となっている項目が存在するのがわかります。この場合、日本語のようなマルチバイト文字を利用できません。これらを utf8 に変更するために my.cnf ファイルを編集します。

2. /etc/my.cnf ファイルで文字コード設定を変更する

MySQLの設定を変更するには /etc/my.cnf ファイルを編集します。このファイルを編集するには権限が必要ですので、sudo コマンドを使ってファイルを編集します。

$ sudo vi /etc/my.cnf

注意:ここでは vi コマンドを使ってファイルを編集しています。vi コマンドを起動するとターミナルをエディタのように操作できます。vi エディタを操作するにはカーソルを移動するNORMALモード、文字を入力するINSERTモードを使い分ける必要があります。vi コマンドを初めて使う場合は使い方を調べてから作業に着手してください。

my.cnf ファイルをオープンすると以下のように [mysqld] というセクションがあるので character-set-server=utf8 を追記します。

# 省略
#
# This group is read by the server
#
[mysqld]
character-set-server=utf8

# 省略

vi エディタは i キーでINSERTモード(編集モード)、 ESC キーでNORMALモード(通常モード)に変化します。INSERTモードで設定を追記したら、 ESC キーでNORMALモードに戻します。それから :wq と入力すればファイルを保存して vi エディタを終了できます。

/etc/my.cnf ファイルを編集したので設定を反映するためにMySQLを再起動します。

$ sudo systemctl restart mariadb

それでは設定変更を確認してみましょう。MySQLにログインします。

$ mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.2.38-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

次に以前に作成していた eldb に接続して show コマンドを使って文字コードの設定を確認します。

MariaDB [(none)]> use eldb;
Database changed
MariaDB [eldb]> 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     | utf8                         |
| character_set_system     | utf8                         |
| character_sets_dir       | /usr/share/mariadb/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0.00 sec)

そうすると character_set_serverlatin1 から utf8 に変更されているのがわかります。ただし、character_set_database 項目は変わらず latin1 のままになっています。この理由は、MySQLはデータベースを作成(create database コマンドを実行)した時点でデータベースの文字コードを決定しているからです。そのため以前に作成していた eldblatin1 となっているのです。

3. データベースを再構築する

データベースの文字コードを utf8 にするために既存のデータベースを削除して、改めてデータベースを作成してみましょう。

データベースを削除するには drop database コマンドを使います。

MariaDB [eldb]> drop database eldb;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>

drop database コマンドでデータベースを削除するとデータベース内のテーブルやレコードも削除されます。重要なデータがある場合は、データベースを削除しないようにしてください。

データベースを削除できたので、改めて create database コマンドでデータベースを作成しましょう。

MariaDB [(none)]> create database eldb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> 

データベースを作成できたので、use コマンドでデータベースに接続して show コマンドで文字コード設定を確認します。

MariaDB [(none)]> use eldb;
Database changed
MariaDB [eldb]> show variables like 'char%';                                                                           
+--------------------------+------------------------------+
| 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/mariadb/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0.00 sec)

MariaDB [eldb]> 

character_set_database 項目も utf8 に変更されているのがわかります。以上でMySQLの文字コード設定の変更は完了です。

drop database コマンドでデータベースを削除したので、データベース内のテーブル、およびレコードも削除されています。create table 文や insert 文を使ってあらためてテーブルを作り直しておいてください。

参考: MySQLプロンプト上で日本語入力ができない場合

2022年1月現在、MySQLをインストールすると、デフォルト設定ではMySQLプロンプト上で日本語入力ができないようになっています。

たとえば以下のように日本語を入力してみましょう。

日本語をEnterキーで確定した時点で消えてしまいます。

このような現象は、ここで設定したMySQLの文字コード設定とは異なる原因によるものです。これについては別紙に対策をまとめます。