utf8mb4和utf8的区别是什么?

阿里巴巴Java开发手册(嵩山版)中有如下规则:

12. 【参考】因国际化需要,所有的字符存储与表示,均采用 utf 8 字符集,那么字符计数方法需
要注意。
说明:
SELECT LENGTH("轻松工作"); 返回为 12
SELECT CHARACTER_LENGTH("轻松工作"); 返回为 4
如果需要存储表情,那么选择 utf8mb4 来进行存储,注意它与 utf8 编码的区别。

区别如下:

utf8mb4和utf8的主要区别在于它们对Unicode字符的支持范围和存储空间的需求:

  1. 编码范围

    • utf8(也常被称为utf8三字节UTF-8)在MySQL中原本设计为支持Basic Multilingual Plane (BMP)内的字符,这意味着它最多只能处理使用1到3个字节编码的Unicode字符。这涵盖了大部分常用的拉丁字母、西里尔字母、希腊字母、阿拉伯字母、汉字等。但是,它不支持BMP之外的字符,比如一些表情符号(Emojis)、某些罕用汉字、以及增补平面中的其他Unicode字符。
    • utf8mb4是utf8的扩展,能够支持存储任何Unicode字符,包括使用4个字节编码的字符,如表情符号、额外的罕用汉字以及增补平面中的其他字符。这使得utf8mb4成为存储包括表情符号在内的全系列Unicode字符的更好选择。
  2. 存储空间

    • 使用utf8字符集时,每个字符最多使用3个字节存储。例如,一个VARCHAR(10)字段在utf8下,如果存储全英文字符,每个字符需要1个字节,而存储中文字符则每个字符需要3个字节。
    • 使用utf8mb4字符集时,每个字符最多使用4个字节存储。这意味着相同的VARCHAR(10)字段,在存储字符时会占用更多的空间。对于全英文字符,utf8mb4仍然只需要1个字节,但对于需要4字节编码的字符(如某些表情符号),则每个字符需要4个字节。
  3. 性能与兼容性

    • 由于utf8mb4需要更多的存储空间,相比utf8,在存储和检索数据时可能会有轻微的性能损失,特别是在处理大量文本数据时。
    • 大多数现代应用程序和数据库系统都支持utf8mb4,但旧系统或有限制的系统可能仅支持utf8。

总结来说,如果你的应用需要支持和存储包括表情符号在内的所有Unicode字符,utf8mb4是更合适的选择。虽然它可能占用更多的存储空间,但它提供了更全面的字符支持。而对于不需要存储四字节字符的应用,使用utf8可以节省空间。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值