Mysql或MariaDB无法保存UTF-8编码的表情符号

Mysql的UTF-8编码不支持4字节字符,如表情符号和部分汉字,导致存储失败。官方已修复此问题,推出utf8mb4编码,完全兼容RFC3629规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  前段时间贴吧更新了一个昵称规则,好像必须要用一个特殊符号或者表情符号写到昵称里,就像这种小表情:贴吧爱心表情
  那些曾经随意起用户名然后发现贴吧无法改名的用户得到了第二次新生。而在我编写一个注册系统时,也将用户名中包含表情符号的功能考虑进去了,结果发现报错Mysql无法存储此字符。在这个坑里我爬了半天,是怎么回事呢?
  事实上这是Mysql的一个bug,在Mysql中,如果使用UTF-8编码来保存字符串(当然,这是很常见的,大家都这么做),那么就需要注意Mysql的“UTF-8”编码并不是广为流传的、约定俗成的UTF-8
  一般我们使用的广为流传的UTF-8是在以1-4(1-6是旧规范,现已被RFC 3629修改为1-4)个字节来表示一个字符的。而Mysql的“UTF-8”是早于RFC 3629设计的,它只支持1-3个字节表示一个字符…所以不仅仅是现在的表情符号,汉字、韩文中某些达到四个字节的偏僻字,也应当无法存入。
  后来Mysql官方在2010年,悄悄发布了一个utf8mb4编码修复了此bug。utf8mb4编码,就是符合RFC 3629规范的Mysql、MariaDB用的UTF-8编码了。所以现在我们在使用Mysql或MariaDB时,应当使用utf8mb4但是现在很多生产环境的Mysql库还是用的“UTF-8”啊!坑啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值