【CakePHP3】絵文字をSQLに保存する方法!
CakePHP3で絵文字が入ったテキストをMySQLに保存しようとしたら、以下のようなエラーが発生してしまいました。
General error: 1366 Incorrect string value:・・・
これは文字コードが原因だそうです。絵文字は「utf8mb4」という文字コードじゃないと保存できないんですね・・。
ということでMySQLの文字コードを「utf8mb4」に変更します。「/etc/my.cnf」の内容を書き換えてsqldを再起動します。
my.cnfの内容は以下。
[client] default-character-set=utf8mb4 [mysqld] character-set-server=utf8mb4 skip-character-set-client-handshake
# /etc/init.d/mysqld restart Stopping mysqld: [ OK ] Starting mysqld: [ OK ] #mysql -u hogege -pfugagaga mysql> show variables like 'character_set%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec)
さらにCakePHPのファイル「/config/app.php」の中身も修正してあげましょう。
'Datasources' => [ 'default' => [ //'port' => 'nonstandard_port_number', 'username' => 'hogege', 'password' => 'fagaga', 'database' => 'piyoyo', 'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'cacheMetadata' => true, 'log' => false,
これで無事CakePHPで絵文字がsaveできるようになりました。
めでたしめでたし。