mysqlでiPhone絵文字対応したときのメモ
はじめに
phpからmysqlへiphoneの絵文字を含む文字列を登録しようとすると絵文字以降の文字列が登録されない。という現象が起きました。
はじめは、iphone絵文字がmysqlのutf8におさまりきらない文字コードを使ってるとのことだったので登録前に以下のような関数を使う事で無理矢理対応していました
/** * iPhone絵文字を削除する関数 */ function filterIosEmoji($string) { return preg_replace('/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/','',$string); }
しかしちょっと強引だったので対応したときのメモです
やったこと
googleで検索するとたくさん出てきました。僕の場合は以下の対応で無事解決しました。
ちなみにこの対応でiphoneで登録した絵文字をandroidで見るとiphoneと同じ絵文字が表示されていました。
これは想定外(いい意味で)だったのですが、仕組みというか理屈がちゃんとわかってないので次回ちゃんと調べてみようと思います
my.cnf
# ios絵文字対策で追記 character-set-server = utf8mb4 skip-character-set-client-handshake
テーブルの文字コード変更
「utf8_general_ci」から「utf8mb4_general_ci」へ変更
また、varcharまたはtext型などのカラムに「utf8_general_ci」のものがあればこれも変更