为何不要在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吧。

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

相关文章

  • mybatis分页插件pageHelper详解及简单实例

    mybatis分页插件pageHelper详解及简单实例

    这篇文章主要介绍了mybatis分页插件pageHelper详解及简单实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • MySQL实现数据更新的示例详解

    MySQL实现数据更新的示例详解

    这篇文章主要为大家详细介绍了MySQL实现数据更新的相关资料,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 彻底解决MySQL使用中文乱码的方法

    彻底解决MySQL使用中文乱码的方法

    本文详细讲解了彻底解决MySQL使用中文乱码的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • Mysql深入了解联表查询的特点

    Mysql深入了解联表查询的特点

    这篇文章主要给大家介绍了关于MySQL联表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2022-07-07
  • Mysql中 show table status 获取表信息的方法

    Mysql中 show table status 获取表信息的方法

    这篇文章主要介绍了Mysql中 show table status 获取表信息的方法的相关资料,需要的朋友可以参考下
    2016-03-03
  • MySQL用户与权限的管理详解

    MySQL用户与权限的管理详解

    这篇文章主要介绍了MySQL用户与权限的管理,详细分析了mysql用户密码、权限设置与使用相关操作原理及注意事项,需要的朋友可以参考下
    2019-07-07
  • Mysql分组查询每组最新的一条数据的五种实现过程

    Mysql分组查询每组最新的一条数据的五种实现过程

    本文介绍了五种在MySQL中获取每个分组最新一条数据的方法,包括子查询和JOIN、窗口函数、变量、聚合函数和子查询以及使用DISTINCT关键字,推荐使用子查询和JOIN操作或窗口函数,避免使用变量
    2024-11-11
  • 浅谈MySQL 统计行数的 count

    浅谈MySQL 统计行数的 count

    这篇文章主要介绍了MySQL 统计行数的 count的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • MySQL百万级数据,怎样做分页查询

    MySQL百万级数据,怎样做分页查询

    这篇文章主要介绍了MySQL百万级数据,怎样做分页查询?今天咱们就来聊聊这个话题,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 关于MYSQL 你需要知道的数据类型和操作数据表

    关于MYSQL 你需要知道的数据类型和操作数据表

    这篇文章主要介绍了关于MYSQL中数据类型的知识和操作数据表的方法,文中讲解非常详细供大家参考学习,感兴趣的朋友可以了解下
    2020-06-06

最新评论