emahiro/b.log

日々の勉強の記録とか育児の記録とか。

DBで絵文字を保存するときは文字列長に注意する

Overview

https://ema-hiro.hatenablog.com/entry/2021/01/19/141854 にて文字数をカウントするのは難しい話を書きましたが、追加の余談で、DBに絵文字付きのテキストを保存する時には、文字列長に注意しないといけないことについても記載します。

👩‍👩‍👧‍👧 がどんな構成になってるか?

👩‍👩‍👧‍👧 はこれ単体で25byteあります。

25 byte = 4byte x 4 + 3byte x 3

https://emojipedia.org/family-woman-woman-girl-girl/ にこの絵文字の仕様について記載してあるけれども、👩‍👩‍👧‍👧 は 👩 x2 と 👧 x2 と 3byte の繋ぎ文字3つで構成されてることがわかります。

rune で見ると 7文字であることがわかります。

ref: https://play.golang.org/p/XuJYU8q1gWm

VARCAHR(100) のカラムに 👩‍👩‍👧‍👧 を15文字入れたらどうなるか?

答えだけ言うと 15 文字全て 👩‍👩‍👧‍👧 は表示されません。14文字の 👩‍👩‍👧‍👧 と 1文字の 👧 が表示されます。

理由は上記にも記載した 👩‍👩‍👧‍👧 が複数の絵文字から構成されているからです。

VARCHAR (100) の場合 MySQL の仕様上は空の場合も1文字として計算されるので、文字列としては99文字まで入ります。そのため7文字使ってしまう 👩‍👩‍👧‍👧 が14文字と1文字計算の 👧 までしか保存されません。

See Also