LoginSignup
6
8

More than 5 years have passed since last update.

[Rails][MySQL] 絵文字を保存できるようにする

Last updated at Posted at 2019-04-11

「😀」みたいな絵文字をMySQLに保存したい。

方法

my.cnf に以下を追記

「/etc/my.cnf」「/etc/mysql/my.cnf」あたりにあるはず。

※最後の3行は、MariaDB >= 10.3.1 ならデフォルトで設定されているので追記しなくてよい。
 (設定自体が出来なくなってもいる。 参考

my.cnf
[mysql]
default-character-set=utf8mb4

[mysqld]
character-set-server = utf8mb4
skip-character-set-client-handshake
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init-connect = SET NAMES utf8mb4
innodb_file_format = Barracuda         # MariaDB >= 10.3.1 なら削除
innodb_file_per_table = 1              # MariaDB >= 10.3.1 なら削除
innodb_large_prefix                    # MariaDB >= 10.3.1 なら削除

※AWSのRDSでこの設定をする場合はこちら

database.ymlを変更

database.yml
# 変更前
encoding: utf8

# 変更後
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_unicode_ci

databaseを作成

bash
bundle exec rake db:create
bundle exec rake db:migrate

確認

bash
mysql # mysqlにログイン
mysql
use データベース名; # データベースを選択
show variables like 'character_set%'; # 文字コード表示

こんな風に表示されるはず。

+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8                           |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+

追記(経験談)

AWSのproduction環境で上記設定をした時、database.ymlが反映されず、SQL発行時に「SET NAMES utf8」が出てしまい、絵文字が保存出来ないという状況が起きました。インスタンスを再起動してみたら直りました。

Capistranoを使っていて、「shared/config/」にdatabase.ymlを置いていたので、これが理由なのかなと思っています。

参考

https://qiita.com/okamu_/items/5eb81688849fbe351350
https://y-hilite.com/3192/

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8