为何不要在MySQL中使用utf - 8编码方式详解

  

<强>
  

  

MySQL从4.1版本开始支持utf - 8,也就是2003年,然而目前流行的utf - 8标准(RFC 3629)是在此之后规定的。正因此,才造就了MySQL中的utf - 8与我们日常开发中的utf - 8不一致,从到导致了些问题.MySQL的utf - 8只支持每个字符最多三个字节,而真正的utf - 8是每个字符最多四个字节。
  

  


  

  

有数据库表如下:use utf8编码方式

  

为何不要在MySQL中使用utf - 8编码方式详解

  

往数据库存一条记录:
  

        @Test   公共空间testInsert () {   用户用户=新用户();   用户。setUsername (“\ uD83D \ uDE00”);   user.setPassword (“123456”);   userRepo.save(用户);   }      

这里只是部分代码,看不懂没关系,这里是给用户表插入一条记录。其中用户名是\ uD83D \ uDE00。
  

  

其实\ uD83D \ uDE00是一个emoji表情。

  

为何不要在MySQL中使用utf - 8编码方式详解

  

因为MySQL中utf8字符集只支持三字节utf - 8编码的Unicode范围,而emoji字符属于四字节编码部分,所以程序运行预期是会报错的。运行这段代码:

  

为何不要在MySQL中使用utf - 8编码方式详解

  

与预期一致,报错了。
  

  


  

  

虽然MySQL的utf - 8存在缺陷,但是MySQL(包括mariadb)官方却没有修复此bug,而是通过2010年重新发布的“utf8mb4”来支持真正的utf - 8。因此想要解决此问题,只能够将MySQL数据库设置为utf8mb4字符集才行。
  

  


  

  

这个问题,也是因为某次保存数据的时候保存了一个emoji表情才发现的。其实最早开始用MySQL的时候,就有发现一个utf8mb4了,但是自己却没有却去了解UTF8和utf8mb4的区别。通过此次教训,以后使用MySQL就老老实实的设置字符集为utf8mb4吧。

  

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

为何不要在MySQL中使用utf - 8编码方式详解