1. SIS Lab
  2. >
  3. Blog
  4. >
  5. MariaDBの日本語文字化けを解消するための設定

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.cnfmy.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になった。

参考

B! Pocket
スポンサーリンク

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

索引設計についてのまとめ