由于历史的原因,mysql在5.5.3以前的版本提供的utf8字符集并非是真正的utf8,它只是UTF8的一个子集,提供有限的utf8支持。从mysql5.5.3开始,mysql更改了内部细节实现,增加了一个utf8mb4字符集,支持真正的unicode,长度由之前的最大3位延伸到4位,比如表情符之类的字集终于可以贮存到mysql。
无论mysql提供的是旧版本utf8字集还是utf8mb4,php 都能正确处理。
如果你的mysql版本支持utf8mb4,那么最好在my.cnf中增加如下设置:
[client]
default-character-set = utf8mb4[mysql]
default-character-set = utf8mb4[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
在mysql中,变量名分隔符使用-或 _都是正确的,最好统一。
其它地方参考这里。