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

 更新时间:2019年06月19日 09:06:03   作者:happyjava  
这篇文章主要给大家介绍了关于为何不要在MySQL中使用UTF-8编码方式的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

MySQL的UTF-8编码方式

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

问题复现

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

往数据库存一条记录:

@Test
public void testInsert() {
 User user = new User();
 user.setUsername("\uD83D\uDE00 ");
 user.setPassword("123456");
 userRepo.save(user);
}

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

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

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

与预期一致,报错了。

解决问题

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

总结

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

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

相关文章

  • MySQL 索引分析和优化

    MySQL 索引分析和优化

    MySQL 索引分析和优化...
    2006-12-12
  • MySQL慢查询如何定位详解

    MySQL慢查询如何定位详解

    这篇文章主要给大家介绍了关于MySQL慢查询如何定位的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • mysql中rpm方式安装的详解

    mysql中rpm方式安装的详解

    在本文中小编给大家整理了关于mysql安装之rpm方式安装的详细步骤以及注意点,需要的朋友们学习下。
    2019-03-03
  • MySQL的索引和复合索引的实现

    MySQL的索引和复合索引的实现

    在数据库中,索引是一种特殊的数据结构,它可以帮助我们快速地查询和检索数据,本文主要介绍了MySQL的索引和复合索引的实现,感兴趣的可以了解一下
    2023-11-11
  • windows环境中mysql忘记root密码的解决方法详解

    windows环境中mysql忘记root密码的解决方法详解

    本篇文章是对windows环境中mysql忘记root密码的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL删除外键、增加外键以及删除主键、增加主键的实战步骤

    MySQL删除外键、增加外键以及删除主键、增加主键的实战步骤

    在Mysql中使用外键,可以有效地将多个表格的数据"联动"起来,打破独立状态,互相影响,下面这篇文章主要给大家介绍了关于MySQL删除外键、增加外键以及删除主键、增加主键的相关资料,需要的朋友可以参考下
    2022-08-08
  • mysql本地登录无法使用端口号登录的解决方法

    mysql本地登录无法使用端口号登录的解决方法

    这篇文章主要介绍了mysql本地登录无法使用端口号登录的解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-06-06
  • 允许远程访问MySQL的实现方式

    允许远程访问MySQL的实现方式

    这篇文章主要介绍了允许远程访问MySQL的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 超详细卸载mysql教程(按照步骤可完全卸载)

    超详细卸载mysql教程(按照步骤可完全卸载)

    这mysql和vmware一样不卸载干净问题是真的多,搞得有些朋友都想重装系统了,没事我来说一下mysql如何卸载干净,下面这篇文章主要给大家介绍了关于超详细卸载mysql的教程,只要按照步骤可完全卸载,需要的朋友可以参考下
    2023-03-03
  • mysql解压包的安装基础教程

    mysql解压包的安装基础教程

    这篇文章主要为大家详细介绍了mysql解压包的安装基础教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08

最新评论