ySQL server version 5.5.3 or higher 引入了 utf8mb4 编码。
Utf8 与 Utf8mb4 的区别
Utf8 只能支持 1~3 个字节的字符
Utf8mb4 则可以支持 4 个字节的字符,而 emoji 则是以 4 个字节进行存储的。 所以要支持 emoji 则必须使用 Utf8mb4.
数据库与数据集表的 charset 是否需要同时设置
参考 http://stackoverflow.com/questions/24356090/difference-between-database-table-column-collation
如果数据表设置了字符集,那么数据库在创建的时候就不需要了。如果数据库创建的时候指定了字符集,而建表的时候没有指定,那么数据表会继承数据库的字符集设置。
所以,像 wordpress 这种,在数据表中指定了字符集的做法,理论上就不需要在建立数据库的时候再指定字符集了。
但是,实际中,我还是觉得应该在建数据库的时候指定字符集。仍然以 wordpress 为例,虽然官方的建表脚本指定了字符集,但是这并不代表所有的三方插件也会遵守这个规范。假如一个三方插件没有指定字符集,那么就会默认采用数据库的字符集。这样做就非常保险。
团队项目中,也会有同样的问题,你也无法完全确保其他人每次建表时都指定了字符集。
所以好习惯应该是
建数据库时指定字符集
建数据表时也指定字符集