美文网首页
mysql中utf-8和utf8mb4选择使用

mysql中utf-8和utf8mb4选择使用

作者: leeliang | 来源:发表于2022-08-18 23:30 被阅读0次

    最近在研发过程中,发现前端传递的表情符号无法存入到mysql表中。查询了下,发现mysql需要使用utf8mb4进行编码。

    为了搞清楚其中的原因,特意找到了这篇文章。现在将文章主要内容记录下来,有兴趣的还是去看看原文。
    核心:如果要支持unicode,那么记得使用utf8mb4,不要用utf8

    UTF-8编码

    utf-8编码采用可变的1到4个字节来进行字符的编码(U+00000 ~ U+10FFFF)。比如ASCII字符只用一个字节(8bit)来进行表示,而汉字需要2到3个字节来表示。utf-8能够表示1114112个字符(大概一百多万个字符)

    MySQL中的utf8字段

    Mysql中的utf8只能存储具有1到3个字节的unicode字符,对于需要4个字节编码的unicode字符无法支持。比如将emoji表情(4个字节)存入到utf8字段下,是会失败的。同时原文中提到会有安全问题。

    Mysql中的utf8mb4字段

    MySQL5.5.3(2010年发布)中引入了一种新的编码utf8mb4。能够完全支持utf8编码,既对于4字节的unicode字符也能完全存储。

    修改mysql数据库编码格式

    mysql中可以分别指定数据库,表以及表中字段的编码格式。

    修改数据库编码格式
    ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    

    注:COLLATE表示排序规则,集中常用的排序介绍

    1. utf8mb4_unicode_ci: 基于标准unicode进行排序,在各种语言之间精确排序;
    2. utf8mb4_general_ci: 没有实现unicode排序规则,遇到特殊语言或字符集,排序结果可能不一致;性能会更快一些
    3. utf8mb4_bin:区分大小写。mysql中默认不区分大小写

    然而平常开发过程中不要特别关注排序规则,但是要保证编码格式和排序规则要统一。

    总结:使用utf8mb4,不要使用utf8

    参考文章

    1. https://mathiasbynens.be/notes/mysql-utf8mb4

    相关文章

      网友评论

          本文标题:mysql中utf-8和utf8mb4选择使用

          本文链接:https://www.haomeiwen.com/subject/hghpgrtx.html