Edited at

MariaDBの日本語の文字化けを解消する

More than 3 years have passed since last update.

下記のように日本語で登録したデータを取得すると、文字化けしていました。

文字コードにUTF8を設定することで解消したので、その設定と確認の方法。

MariaDB [sample]> insert into sample_tbl values(1, 'テスト');

MariaDB [sample]> select * from sample_tbl;

+------+-------+
| id | title |
+------+-------+
| 1 | ??? |
+------+-------+

まずはテーブルの文字コードを確認。

MariaDB [sample]> show create table sample_tbl;

latin1になってました。

CREATE TABLE `sample_tbl` (

`id` int(11) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

次に下記のSQLを実行。

MariaDB [sample]> 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/ |
+--------------------------+----------------------------+

character_set_databaseとcharacter_set_serverもlatin1でした。

まずはcharacter_set_serverをutf8にするために、server.cnfを設定します。

$ sudo vim /etc/my.cnf.d/server.cnf


server.cnf

[mysqld]

character-set-server=utf8 # 追加

設定後、MariaDBを再起動します。

$ sudo /etc/init.d/mysql restart

再起動後、設定が反映されているか再確認します。

MariaDB [sample]> 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/mysql/charsets/ |
+--------------------------+----------------------------+

character_set_serverはutf8に変更されましたが、

character_set_databaseがまだlatin1のままです。

drop databaseして作りなおしても良いのですが、

スキーマを作りなおすのも手間なので、下記のSQLでデータベースの

デフォルトの文字コードを変更します。

MariaDB [sample]> alter database sample character set utf8;

Query OK, 1 row affected (0.00 sec)

MariaDB [sample]> 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/mysql/charsets/ |
+--------------------------+----------------------------+

変更されているのが確認できました。

後はテーブルを作りなおして、テーブルの文字コードを確認します。

alter table テーブル名 default charset=utf8;

補足:上記のSQLを実行することでテーブルの文字コードを変更することもできます。

MariaDB [sample]> show create table sample_tbl;

CREATE TABLE `sample_tbl` (
`id` int(11) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

MariaDB [sample]> insert into sample_tbl values(1, 'テスト');

MariaDB [sample]> select * from sample_tbl;
+------+-----------+
| id | title |
+------+-----------+
| 1 | テスト |
+------+-----------+

無事に日本語が登録、表示されるようになりました。