Cloud9にインストールしたMySQL(MariaDB)はデフォルト設定だと日本語などのマルチバイト文字の取り扱いができません。以下の手順でMariaDBの文字コード設定を変更できます。
- 現状の文字コード設定を確認する
/etc/my.cnf
ファイルで文字コード設定を変更する- データベースを再構築する
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_server
が latin1
から utf8
に変更されているのがわかります。ただし、character_set_database
項目は変わらず latin1
のままになっています。この理由は、MySQLはデータベースを作成(create database
コマンドを実行)した時点でデータベースの文字コードを決定しているからです。そのため以前に作成していた eldb
は latin1
となっているのです。
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の文字コード設定とは異なる原因によるものです。これについては別紙に対策をまとめます。