utf8mb4

utf8mb4(mb4 = most bytes 4)

utf8是utf8mb4的子集,除了将编码改为utf8mb4外不需要做其他转换。

utf8mb4比utf8多了emoji编码支持 如果实际用途上来看,可以给要用到emoji的库或者说表,设置utf8mb4.  比如评论要支持emoji可以用到.  建议普通表使用utf8 如果这个表需要支持emoji就使用utf8mb4

utf8mb4_unicode_ci 是基于标准的Unicode来排序和比较,能够在各种语言之间精确排序 utf8mb4_general_ci 没有实现Unicode排序规则,在遇到某些特殊语言或字符是,排序结果可能不是所期望的。

utf8mb4_bin :二进制存储,区分大小写

utf8mb4_general_ci :不区分大小写,  某些特殊语言或者字符集,排序结果可能不一致,更快

utf8mb4_unicode_ci :不区分大小写,能够处理特殊字符的排序,更准

### UTF8MB3 和 UTF8MB4 字符编码区别 UTF8MB3 是早期版本的 UTF-8 编码实现,在 MySQL 中支持最多三个字节来表示一个字符[^1]。这意味着对于大多数常用字符集,如拉丁字母、西里尔字母和其他常见符号,都能很好地工作。 然而随着互联网的发展以及对更多样化文字的支持需求增加,出现了需要四个字节才能正确存储的表情符号(Emoji)、一些罕用汉字以及其他 Unicode 扩展区中的特殊字符。为此引入了更完整的 UTF8MB4 编码方案,它能够处理多达四字节长度的字符[^2]。 ```sql -- 查看当前数据库默认字符集 SHOW VARIABLES LIKE 'character_set_database'; ``` ### 存储空间差异 由于每个字符可能占用不同数量的字节,因此相同字符串在两种编码方式下的实际存储大小会有所变化: - 对于只包含基本多文种平面 (BMP) 内部字符的数据而言,两者之间几乎没有差别; - 当涉及到辅助平面 (SIP/Astral Planes) 上面定义的一些罕见字符时,则采用 `utf8mb4` 可能会使数据量增大约三分之一左右[^3]。 ```sql -- 创建表并指定不同的字符集 CREATE TABLE test_utf8 ( id INT AUTO_INCREMENT PRIMARY KEY, text_column VARCHAR(255) CHARACTER SET utf8mb3 -- 使用 utf8mb3 ); CREATE TABLE test_utf8mb4 ( id INT AUTO_INCREMENT PRIMARY KEY, text_column VARCHAR(255) CHARACTER SET utf8mb4 -- 使用 utf8mb4 ); ``` ### 性能影响 尽管存在额外的空间开销,但在现代硬件环境下这种差距通常是可以接受甚至忽略不计的;更重要的是选择合适的字符编码可以避免因无法正常显示某些特定字符而导致的应用程序逻辑错误或用户体验问题[^4]。 ### 安全性和兼容性考量 从安全角度来看,使用更为全面和支持最新标准的 `utf8mb4` 能够更好地防止潜在的安全漏洞,比如 SQL 注入攻击中利用未被正确转义或多字节序列解析不当造成的风险。此外,考虑到未来可能出现的新字符加入 Unicode 标准库的情况,提前迁移到 `utf8mb4` 有助于保持系统的长期稳定运行和良好维护性[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值