2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQLデータベースに絵文字を保存する

Posted at

MySQLでは、デフォルトで絵文字を取り扱うことはできず、保存しようとするとエラーが発生します。
理由は、MySQL上で設定されている文字コードがUTF-8であるのに対して、絵文字はutf8mb4という文字コードでコードされているためです。
よって、MySQLで使用する文字コード設定をutf8mb4に変える必要があります。

実行環境
・Mac OS Catalina 10.15
・MariaDB 10.5.8

文字コードの確認

次のコマンドで文字コードの設定を確認できます。

MariaDB [database]> show variables like 'character%';
>
+--------------------------+--------------------------------------------------------+
| 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/local/Cellar/mariadb/10.5.8/share/mysql/charsets/ |
+--------------------------+--------------------------------------------------------+

これをut8mb4に変えます。

文字コード設定の変更

/usr/local/etc/my.cnfに MySQLの設定ファイルがありますので、これに書き込みます。

/usr/local/etc/my.cnf
[mysqld]
character-set-server = utf8mb4
[client]
default-character-set = utf8mb4

my.cnfが見つからない場合は、次のコマンドで探しましょう。

$ mysql --help | grep my.cnf

MySQLサーバーを再起動し、設定を改めて確認します。

MariaDB [training]> show variables like 'character%';
>
+--------------------------+--------------------------------------------------------+
| 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/local/Cellar/mariadb/10.5.8/share/mysql/charsets/ |
+--------------------------+--------------------------------------------------------+

実際に追加してみます。(user_idとcontentという要素を持つPostsテーブルがあるとします)

MariaDB [database]> INSERT INTO posts (user_id, content) VALUES (4, '😀');
Query OK, 1 row affected (0.003 sec)

できました。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?