MariaDBの日本語文字化けを解消するための設定
更新日:2019.04.27
作成日:2016.05.29
Ruby on RailsからMariaDBを利用した時に、文字化けが発生したのでMariaDBの設定内容を見直した。
前提
MariaDBのバージョン
Server version: 10.1.10-MariaDB MariaDB Server
文字化けする
character_set_server, character_set_databaseが、latin1になっているのが原因で、新規作成したデータベース、テーブルの文字latin1になっていた。
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/ |
+--------------------------+----------------------------+
各設定の説明
設定値 | 説明 |
---|---|
character_set_client | クライアント => サーバーにメッセージを送る際に使われるキャラセット |
character_set_connection | クライアントが送ったクエリをサーバーが解析する際、このキャラセットに従ってunescapeする |
character_set_database | DBのdefaultキャラセット。“LOAD DATA INFILE"文はこの指定に従う |
character_set_filesystem | ファイルシステムの文字コード |
character_set_results | サーバー => クライアントに結果を送信するときに使われるキャラセット |
character_set_server | サーバーのdefaultキャラセット |
character_set_system | ファイル名をこのキャラセットで扱う。utf8固定 |
character_sets_dir | キャラセットファイルの置いてあるディレクトリ |
参考: MySQL/MariaDB 文字コードの設定 - takafumi blog
設定
一般的には、/etc/my.cnf
に/etc/my.cnf.d
ディレクトリにある設定ファイルを読み込む設定を書いておき、詳細設定は、/etc/my.cnf.d
の各設定ファイルに書く。今回、自分の設定ファイルを確認すると、/etc/my.cnf
にmy.cnf.d
ディレクトリを読み込む設定がされていなかったため、追加した。
/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
port=3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
+!includedir /etc/my.cnf.d
/etc/my.cnf.d/server.cnf
続いて、/etc/my.cnf.d/server.cnf
に文字コードの設定を追記した。
sudo vim /etc/my.cnf.d/server.cnf
# this is read by the standalone daemon and embedded servers
[server]
# this is only for the mysqld standalone daemon
[mysqld]
+character-set-server=utf8 #added
[galera]
[embedded]
[mariadb]
MariaDBを再起動し、設定を反映させる。
sudo /etc/init.d/mysql restart
utf-8
MariaDB [(none)]> 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/ |
+--------------------------+----------------------------+
これで新規作成されるデータベース、テーブルの文字コードは、utf8になった。
参考
Related contents
TECH
2015.08.07
正規化とは何か?
TECH
2015.06.10
[SQL実践入門]内部結合と外部結合のイメージ
TECH
2015.06.01
[SQL実践入門]結合のアルゴリズム Nested Loops, Hash, Sort Merge
TECH
2014.12.24
達人に学ぶSQL, DB設計をぽちった
TECH
2013.10.02
索引設計についてのまとめ