SOFTELメモ

</> 技術者募集

【MySQL】utf8なデータベースで4byte文字を格納する方法

問題

MySQLのutf8なデータベースでは、吉野家の吉(実際は上が長い)とか、スマホの絵文字とか格納できないですよね?

utf8mb4にしないとダメですよね?

Unicodeで4byteの文字

答え

格納だけ考えるなら、blob型にするのもよいでしょう。検索は場合によっては問題があるかもしれません。

以下、実験。

text型のカラムを持つテーブルを作る。varcharでもよい。

CREATE TABLE `x` (
  `emoji` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8

上のテーブルに絵文字を入れると、

INSERT INTO `x` (`emoji`) VALUES ('ビール🍺おいしい');

4byte文字以降が切れる。

select * from x;
emoji
ビール

カラムをblob型にすると、

CREATE TABLE `x` (
  `emoji` blob
) ENGINE=InnoDB DEFAULT CHARSET=utf8
INSERT INTO `x` (`emoji`) VALUES ('ビール🍺おいしい');
select * from x;
emoji
ビール🍺おいしい

保存はできた。

検索もアルファベットの大文字小文字が区別されるけれど、できなくはない。

関連するメモ

コメント