やったこと

webサービスを作るときに考えたことを垂れ流します

【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


mysqlにログインして文字コードの変更を確認。

# /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できるようになりました。

めでたしめでたし。