15148


PHP＋MySQLでWebアプリケーションを開発しています。  
スマホからの絵文字がutf8では保存できないので、utf8mb4に変更しました。これでハートや太陽などは入るようになったのですが、人の顔のような絵文字は??になります。そこで、質問があります。

  * utf8mb4でも、保存できる絵文字とできない絵文字が存在するのでしょうか。
  * それとも、設定に不足か間違いがあって、本来全て保存できるものでしょうか？
  * 保存できるものとできないものがある場合、違いは何でしょうか。見分ける方法等はありますか？

ぐぐっても回答が見つからず、困っております。情報へのポインタだけでも構いませんので、何卒よろしくお願いします。

追記：環境  
CentOS6.5  
Apache2.2.15  
PHP5.6.12  
MySQL5.5.28  
フレームワーク 自作

my.cnfより抜粋

[code]

    [mysqld]
    
    # character-set
    character-set-server=utf8mb4
    skip-character-set-client-handshake
    
    [client]
    #default-character-set=utf8
    
    [mysql]
    default-character-set=utf8
    
    [mysqldump]
    default-character-set=utf8
    
[/code]

php.ini内に特に文字コードの設定なし  
（[mbstring]セクションはすべてコメントアウトされている）


CC BY-SA 3.0
2015-09-02T02:21:13.920
15134
2015-09-02T13:48:26.143
2015-09-02T13:48:26.143
11176
11176
question
php mysql database
MySQLの文字コードをutf8mb4に変更したが、絵文字がうまく入らない


utf8mb4 はすべての絵文字が入ります。

「?」になってしまうということは、テーブルやカラムの charset がちゃんと utf8mb4 になっていないか、クライアントからの接続が utf8mb4
になっていないということが考えられます。

接続の charset は `SHOW VARIABLES LIKE '%char%'` クエリで確認できます。

接続の charset は接続毎に設定されるので、mysql コマンドで接続したときの charset がちゃんと utf8mb4 だったとしても、PHP
アプリケーションからの接続では異なっている場合があります。

自分は PHP には詳しくないのですが、PHP アプリケーション内で MySQL 接続用の charset
を指定できるパラメータがあると思いますので、それがちゃんと utf8mb4 になっているのかを確認してみるのが良いと思います。


CC BY-SA 3.0
2015-09-02T12:51:59.753
15148
2015-09-02T12:51:59.753
3249
15134
answer