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)
できました。