絵文字を保存したい
スマホが普及してから絵文字を文中に入れるのはもはや普通のことですよね。
掲示板などでも絵文字を入力できるものは増えていますよね。
Webアプリの開発者の中には絵文字を入力できるフォームを作りたいという人もいるのではないでしょうか?
実はこれ、意外と簡単なのです。
ここではSpring BootとMySQLを使っている場合の絵文字の保存方法を共有したいと思います。
MySQLの文字コードを変更
普段データベースを設定する時、文字コードは何を使っていますか?
大体utf8を使うことが多いですよね。
普通の文字列であればそれでも構いませんが、絵文字を登録する場合はutf8を拡張したutf8mb4を使う必要があります。
文字コードを変更するためにはmy.cnfファイルに変更を加えます。
※my.cnfファイルの場所は環境によって異なってくるのでご自身で調べてもらう必要があります。
Macの場合は「/usr/local/etc/」直下、Linuxの場合は「/etc/my.cnf」あたりになるかと思います。
以下のように「character-set-server」と「default-character-set」の値を変更してください。
my.cnf
[mysqld] character-set-server = utf8mb4 [client] default-character-set = utf8mb4
設定変更後、MySQLを再起動させれば文字コードが反映されます。
反映されていることを確認するために、MySQLにログインした後に以下のコマンドを入力し、各文字コードが以下のようにutf8mb4になっていることを確認してください。
mysql> 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/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec)
この状態でデータベース、ひいてはテーブルを作成すればMySQLに絵文字を登録できます。
実験的に以下の絵文字を何らかのカラムに登録してみてください。
😀
※注意点として、データベースやテーブルを新しく作成する場合に、utf8mb4以外の文字コードを使用しないでください。
MySQLサーバの文字コードはutf8mb4だけどカラムの文字コードはutf8の場合などはもちろん絵文字は登録できません。
また、utf8で作成していた既存のカラムをutf8mb4に変更したい場合、MySQLサーバの文字コードを変えてもカラムの文字コードは変わっていないので注意してください。
Spring Bootでデータベース接続時の文字コードを変更
あとはSpring Bootでデータベースに接続する時の文字コードを変更する必要があります。
変更するファイルは環境変数を書き込んでいるapplication.ymlかapplication.propertiesです。
以下は変更前と変更後を並べますが、変更後ではデータベースの接続で文字コードを指定しています。
※データベース名は「test-database」であるとします。
application.ymlの場合 <変更前>
spring: datasource: url: jdbc:mysql://localhost/test-database
application.propertiesの場合 <変更前>
spring.datasource.url=jdbc:mysql://localhost/test-database
application.ymlの場合 <変更後>
spring: datasource: url: jdbc:mysql://localhost/test-database?character_set_server=utf8mb4
application.propertiesの場合 <変更後>
spring.datasource.url=jdbc:mysql://localhost/test-database?character_set_server=utf8mb4
これでSpringBootより絵文字が登録できるはずです。
まとめ
いかがでしたか?
設定自体は簡単ですよね。
- 作者:掌田津耶乃
- 発売日: 2018/01/30
- メディア: 単行本
- 作者:掌田津耶乃
- 発売日: 2017/05/09
- メディア: Kindle版
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者:株式会社NTTデータ
- 発売日: 2016/07/21
- メディア: 大型本
はじめてのSpring Boot―スプリング・フレームワークで簡単Javaアプリ開発 (I・O BOOKS)
- 作者:俊明, 槙
- 発売日: 2016/09/01
- メディア: 単行本
- 作者:Walls, Craig
- 発売日: 2016/01/03
- メディア: ペーパーバック
Spring Bootビギナーズガイド: Webアプリケーション開発を高速化せよ! PRIMERシリーズ (libroブックス)
- 作者:掌田津耶乃
- 発売日: 2015/05/28
- メディア: Kindle版