之前一直认为,utf8mb4相比utf8最大的作用就是能存储Emoji表情,直到遇到了内容中带有【】的文章需要入库的时候。

普及两个知识
UTF-8字符集编码有可能是两个、三个、四个字节。但MySQL中的utf8字符集,最多只能存储三个字节的字符,除Emoji表情之外,还有一些生僻字是需要四个字节的,比如前面提到的【】字
查看某文字占用的字节数,可使用Linux中echo -n 字|xdd命令来把该汉字转为十六进制格式输出。

可看到“测”字的十六进制格式为e6b58b,每个十六进制占用0.5个字节,所以“测”字整体是3字节,MySQL中的utf8字符集可以支持,再看来【】字。
由8eedbaa4这8个十六进制组成,占4个字节,传统的utf8字符集无法支持。
入库时,会截断内容,4字节以及之后内容无法写入。
解决办法

  1. 建表时,如果版本支持(MySQL5.5.3及以上),为了获得更好的兼容性,建议使用utf8mb4字符集,在utf8mb4字符集下,字符串的char类型会多消耗一些空间,建议utf8mb4字符集下,使用varchar代替char类型。
  2. 如果版本不支持,而且又因为生产环境项目过多而无法升级,可将4字节的字符转换成base64、json甚至url编码后入库

建表时数据库建议使用 utf8mb4字符集相关推荐

  1. MySQL数据库建表时对于某个字段设置了默认值,但是使用Spring Data Jpa的save后默认值没有生效

    问题描述:MySQL数据库建表时对于某个字段设置了默认值,但是使用Spring Data Jpa的save后默认值没有生效.MySQL数据库中构建的用户表表结构如下所示: DROP TABLE IF ...

  2. 数据库建表时一定要设置外键约束关系吗?

    数据库建表时一定要设置外键约束关系吗? 我们都知道每张数据表都有一个能够确定每行数据唯一性的字段,也就是主键.而在关系数据库中,常常有两表存在一定关系的情况.即一张表的主键跟另一张的外键存在对应关系, ...

  3. hibernate自动建表到数据库及spring下自动建表到数据库

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...

  4. 【Hive】建表时的存储格式

    目录 一.简介 1.hive建表时存储格式 2.五种存储格式的区别 二.实践操作 1.textfile 2.sequencefile 3.rcfile 4.orc 5.parquet 三.适用场景 一 ...

  5. Oracle数据库建表 Oracle数据库的统一命名与编码规范

    本文转载自:http://chinaxxren.iteye.com/blog/889590 如有疑问请咨询原博主,谢谢!! 写在前边: 规范是一种习惯,在Oracle数据库中笔者认为表中的字段命名规范 ...

  6. sql server为什么建表时在表名前加''[dbo]''

    DBO是每个数据库的默认用户,具有所有者权限,即DbOwner 通过用DBO作为所有者来定义对象,能够使数据库中的任何用户引用而不必提供所有者名称. 比如:你以User1登录进去并建表Table,而未 ...

  7. mysql 建表 日期格式_MySQL建表时,日期时间类型选择

    MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示 DA ...

  8. mysql建表时主键_mysql建表时设置主键的方法

    mysql建表时设置主键的方法 发布时间:2020-10-10 15:17:28 来源:亿速云 阅读:119 作者:小新 mysql建表时设置主键的方法?这个问题可能是我们日常学习或工作经常见到的.希 ...

  9. Oracle建表时提示标识符无效

    Oracle建表时提示标识符无效 今天用oracle建表时一直提示最后一行标识符无效,经过百度得知level是oracle的关键字,所以字段不能命名为level,后改为roadlevel, CREAT ...

最新文章

  1. 福利 | 给你个机会与俞士纶(Philip S. Yu)面对面交流 !(附俞教授论文合集资源)...
  2. LeCun:现在还没有真正的AI系统,机器与生物系统差远了
  3. Ubuntu下Git服务端搭建
  4. java f反射_java反射机制
  5. cocos android-1,cocos2dx在windows下开发,编译到android上(1)
  6. SaltStack匹配target-第六篇
  7. Bzoj 3226: [Sdoi2008]校门外的区间
  8. java二叉树原理_史上最全二叉树遍历详解(Java实现,原理相同)
  9. npm前端包管理工具简介---npm工作笔记001
  10. java 隐藏任务栏,在Java中隐藏Windows任务栏?
  11. python 指针_C++的动态内存:C++的指针
  12. andorid月总结
  13. 微信小程序项目源代码SSM英语学习平台
  14. Access数据库使用DateAdd函数更新日期信息
  15. Unity 编辑器开发实战【Scene View】- UI Selector
  16. 零基础选择前端还是后端?
  17. win7交换机共享宽带连接上网
  18. 《斗罗大陆H5》月刃武魂指导和魂环搭配
  19. 计算机快捷键40个,如何快速记住计算机快捷键
  20. Oracle 11gR2新特性--延迟段创建(Deferred Segment Creation)和exp不能导出空表

热门文章

  1. CVPR 2019 | PoolNet:基于池化技术的显著性目标检测
  2. 基线系统需要受到更多关注:基于词向量的简单模型 | ACL 2018论文解读
  3. 今晚直播 | 从编码器与解码器端改进生成式句子摘要
  4. 丑憨批的Transformer笔记
  5. 【天池赛事】零基础入门语义分割-地表建筑物识别 Task3:网络模型结构发展
  6. 图像语义分割:FCN全卷积网络概述
  7. HDU1407 测试你是否和LTC水平一样高 暴力、二分、hash
  8. pip 命令参数以及如何配置国内镜像源
  9. Springboot本地缓存和redis缓存
  10. FindInSet性能优化