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
- 11.4.1 CHAR および VARCHAR 型
- 11.1.3 文字列型の概要
- 👩👩👧👧 Family: Woman, Woman, Girl, Girl