mysqlでiPhone絵文字対応したときのメモ

はじめに

phpからmysqliphoneの絵文字を含む文字列を登録しようとすると絵文字以降の文字列が登録されない。という現象が起きました。
はじめは、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

mysqlサーバーの文字コードを編集してmysqlを再起動

テーブルの文字コード変更

「utf8_general_ci」から「utf8mb4_general_ci」へ変更
また、varcharまたはtext型などのカラムに「utf8_general_ci」のものがあればこれも変更

fuelphpの設定

fuel/app/config/db.phpの編集

return array(
	'default' => array(
		'connection'  => array(
			'dsn'        => 'mysql:host=;dbname=',
			'username'   => '',
			'password'   => '',
		),
        'charset' => 'utf8mb4',//★ココ
	),
);

以上です