表太多,仅昵称和评论设置utf8mb4,config、tag、router等完全用不到utf8mb4的,依旧utf8这种utf8 utf8mb4混合会对搜索、索引和log记录有影响吗?这种方式比纯utf8mb4更快速吗?是否稳定?mysqld配置中是否需要修改什么配置、优化utf8mb4
PHP代码DB_CHARSET设置utf8mb4,会对uft8数据有影响吗?
没有太多优势因为utf8mb4仅在emoji等特殊字符的时候用到了4个字节存储其余时候表现和mysql的utf8字符集是一样的, 存储汉字仍然是3个字节
(因为mysql的utf8字符集的单个字符的最大长度方面的实现是错误的, 所以才冒出个utf8mb4字符集出来, 实际上这个utf8mb4就是标准的utf8)
当然, 需要避免使用char, 改用varchar, 因为mysql的char列类型在utf8mb4下, 为了保证所有的数据都存的下, char将会占用字符数*4的字节数 (mysql的char列类型utf8将占用字符数*3的字节数), 以保证空间分配足够. 所以建议用可变长度varchar, 以节省空间. 可变长度消耗的存储空间为: 实际存储需要的字节数+1或2个字节表达的长度.
另外对于纯英文字符的列, 你可以另外考虑varbinary(可变长度binary)和binary列(适用于固定长度的英文字符, 例如密码哈希)类型, 性能比varchar略好, 因为这个存储二进制数据
没有太多优势
因为utf8mb4仅在emoji等特殊字符的时候用到了4个字节存储
其余时候表现和mysql的utf8字符集是一样的, 存储汉字仍然是3个字节
(因为mysql的utf8字符集的单个字符的最大长度方面的实现是错误的, 所以才冒出个utf8mb4字符集出来, 实际上这个utf8mb4就是标准的utf8)
当然, 需要避免使用char, 改用varchar, 因为mysql的char列类型在utf8mb4下, 为了保证所有的数据都存的下, char将会占用字符数*4的字节数 (mysql的char列类型utf8将占用字符数*3的字节数), 以保证空间分配足够. 所以建议用可变长度varchar, 以节省空间. 可变长度消耗的存储空间为: 实际存储需要的字节数+1或2个字节表达的长度.
另外对于纯英文字符的列, 你可以另外考虑varbinary(可变长度binary)和binary列(适用于固定长度的英文字符, 例如密码哈希)类型, 性能比varchar略好, 因为这个存储二进制数据