Incorrect string value异常——MySQL编码细说

异常由来:

我们使用MySQL数据库utf8编码进入数据存储。 

最近游戏接入到腾讯平台,因而通过接口获取其平台上的用户数据,发现取过来的用户名可谓五花八门,各种符号应有尽有。

导致入库时,出现Incorrect string value异常。

 

经过查阅得知:

MySQLutf8编码默认为utf8mb3,既每字符最大占用3字节存储空间。

然而众多用户名中出现4字节字符,导致MySQL无法存储,因而抛出异常。

 

解决方案:

因utf8mb3无法支持4字节字符,因而只需要将对应字段编码更改为能支持4字节的编码(utf8mb4、utf16、utf32任意一种)即可。

因utf8mb4占用空间少,所以为最优选择。

 

utf8(utf8mb3)、utf8mb4、utf16、utf32的区别:

utf8(utf8mb3):使用1~3字节的空间对字符编码,就是字符是几字节就用几字节空间,但最大只能存储3字节。

utf8mb4:使用1~4字节的空间对字符编码,就是字符是几字节就用几字节空间,可以存储任意字符(因为不管何种字符,最大也就4字节)。

utf16:uses 2 bytes for the first 65,536 codepoints,and 4 bytes for everything else.可以理解为某些字符使用2字节,其他的使用4字节。

utf32:使用固定4个字节的空间对任意字符编码。

 

额外信息:

MySQL 5.5数据库之前的版本只支持ucs2和utf8两种Unicode字符集,即只支持Unicode 3.0的标准。

MySQL 5.5版本对于Unicode标准已经支持到5.0。共支持ucs2、utf8(utf8mb3)、utf8mb4、utf16,以及utf32五种Unicode编码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值