- blogs:
- cles::blog
2018/12/16

MariaDB の utf8 テーブルに絵文字を格納するには


MariaDB に UTF-8 の絵文字を格納したい場合には、歴史的経緯から charset を utf8mb4 にしておく必要があります。
このブログも含めて、既存のテーブルが utf8 の場合にに utf8mb4 に切り替えようとするといろいろ面倒なことがあるので、最小限の変更でなんとか誤魔化す方法がないかと思って調べてみると、数値文字参照でエスケープするという方法を見つけたのでメモ。
例えば 🦊 を 🦊 にしてしまえば 1 バイト文字だけになるので、テーブル定義を変更しなくても DB に格納できることになります。
ただ、この逃げ方は内容の検索とかを行う場合に問題になりますが、4バイトの文字はほぼ絵文字なので、今回は目を瞑ることにしました。
ちょうど以下のルーチンを使わせていただきました。
EcmaScript 6 の String.prototype.codePointAt および String.fromCodePoint を使えば、次のように書けます。
function utf8mb4_encode_numericentity(str) { var re = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; return str.replace(re, function(match) { return '&#x' + match.codePointAt(0).toString(16).toUpperCase() + ';'; }); }
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/10643
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。
OpenID を使ってログインすることができます。
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 . アーロンチェアのポスチャーフィットを修理(111411)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110083)
3 . 年次の人間ドックへ(109624)
4 . 2023 年分の確定申告完了!(1つめ)(109209)
5 . 三菱鉛筆がラミーを買収(109092)
2 . 福岡銀がデマの投稿者への刑事告訴を検討中(110083)
3 . 年次の人間ドックへ(109624)
4 . 2023 年分の確定申告完了!(1つめ)(109209)
5 . 三菱鉛筆がラミーを買収(109092)
cles::blogについて
Referrers