字符编码格式数据库不支持

  • 原数据库字符集设置为CHARSET=utf8,有些数据编码格式例如emoji的表情符号mysql 中的utf8并不支持
  • 据官方文档的解释:

    mysql 支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了。三个字节的 UTF-8 最大能编码的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文种平面(BMP)。

  • 也就是说,任何不在基本多文本平面的 Unicode字符,都无法使用 Mysql 的 utf8 字符集存储。包括 Emoji 表情(Emoji 是一种特殊的 Unicode 编码,常见于 ios 和 android 手机上),和很多不常用的汉字,以及任何新增的 Unicode 字符等等。

  • 观察日志数据发现linux下打印出的日志存在类似 <u+1f44d> 样式的字符,属于unicode编码的特殊字符,文本内容也是在此截断的,由此可以判断为字符编码格式问题

3. 解决方案

3.1 升级 mysql 版本,并将utf8字符集升级到utf8mb4

升级你的 mysql 到 5.5.3 之后即可,查看当前环境版本:

select version();
  • MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。好在utf8mb4是utf8的超集,除了将编码改为utf8bp4外不需要做其他转换。当然,为了节省空间,一般情况下使用utf8也就够了。
  • 所以好的技术就是,采用对当前而言最好的解决方案,然后再逐步迭代满足新的需求。

3.1.1 直接修改表结构

--修改数据库字符集
ALTER DATABASE test CHARACTER SET = utf8mb4;
--修改表字符集
alter table test convert to character set utf8mb4;
--修改字符字符集
ALTER TABLE `test` CHANGE COLUMN `name` `name` varchar(12) CHARACTER SET utf8mb4;

3.1.2 修改数据库默认配置

[client]
default-character-set = utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[mysql]
default-character-set = utf8mb4

3.2 修改数据库字段类型

修改字段类型为二进制存储,通过样可以达到目的,进行兼容

--修改字符字符集
ALTER TABLE `test` CHANGE COLUMN `name` `name` MediumBlob ;

3.3 强行过滤掉生僻字符串

  • 从业务和技术的角度综合考虑,可以做个折中,将生僻字符串提前过滤掉,因为这类字符串本来就使用的很少,即使存进数据库了,展示、查询的时候也会多少有其它的问题,不如直接过滤掉,mysql 不支持四字节的 utf8 一方面可能是历史包袱,另一方面估计也是为了省空间

特殊字符编码格式数据库不支持相关推荐

  1. mysql特殊字段名称_Mysql必读MySQL创建带特殊字符的数据库名称方法示例

    <MysqL必读MysqL创建带特殊字符的数据库名称方法示例>要点: 本文介绍了MysqL必读MysqL创建带特殊字符的数据库名称方法示例,希望对您有用.如果有疑问,可以联系我们. 文章抓 ...

  2. 支持纳管Redis数据库,支持查看、连接和会话审计Kubernetes Pod,JumpServer堡垒机v2.18.0发布

    2022年1月24日,JumpServer开源堡垒机正式发布v2.18.0版本.在这一版本中,JumpServer新增支持纳管Redis数据库,支持查看.连接.操作和会话审计Kubernetes Po ...

  3. 关于微信名称特殊字符存数据库出问题; Incorrect string value: ‘\xF0\x9F\x90\xAF’ for column ‘nickName’ at row 1

    首先说一下为啥会出现这个问题: 我们的数据库编码通常为UTF8,MYSQL的UTF8编码最多3个字节,EMOJI表情或者某些特殊字符的编码是4个字节,导致存入数据库时发生了异常. 解决办法: 1. 修 ...

  4. mysql数据库特殊字符_MySQL创建带特殊字符的数据库名称方法示例

    前言 这篇文章抓哟讲解了关于如何实现在MySQL中创建带有特殊字符的数据库名称,这里的特殊字符包含:!@#$%^ 方法如下 使用反引号`将数据库名称包含住,反引号`(使用引号是不可以的)即在英文输入法 ...

  5. mysql 数据库名称 特殊字符_Mysql必读MySQL创建带特殊字符的数据库名称方法示例...

    <Mysql必读MySQL创建带特殊字符的数据库名称方法示例>要点: 本文介绍了Mysql必读MySQL创建带特殊字符的数据库名称方法示例,希望对您有用.如果有疑问,可以联系我们. MYS ...

  6. [flask实践] 解决mysql数据库不支持中文的问题

    [flask实践] 解决mysql数据库不支持中文的问题 参考文章: (1)[flask实践] 解决mysql数据库不支持中文的问题 (2)https://www.cnblogs.com/xiaozh ...

  7. 数据库中间件支持数据库集群方案

    咏南数据库中间件支持数据库集群方案 通过咏南数据库中间件作为PROXY(数据库代理)实现的数据库集群,非数据库层面集群. 数据库可以分库分表进行水平或垂直拆分成数据库集群. 咏南中间件作为数据库集群代 ...

  8. mysql支持的平台和操作系统_MySQL 数据库所支持的操作系统_MySQL

    MySQL数据库所支持的操作系统: 我们使用GNU Autoconf,因此将MySQL移植到所有使用Posix线程和C++编译器的现代系统是可能的.(要求服务器支持线程.如果只是编译客户端代码,则只需 ...

  9. mysql数据库增加模块_使用bind-mysql模块增加对mysql数据库的支持

    对于bind,如果想修改或增加dns记录,是直接修改文本的,这样的话一方面不方面管理,另一方面容易出错,如果我们增加对mysql数据库的支持,再配合php或perl,python等程序直接操作mysq ...

最新文章

  1. 使用python中的Matplotlib绘图示例(续)
  2. 「golang」panic: commands out of sync. Did you run multiple statements at once
  3. 计算机专业名词术语raid,RAID中的9个专业术语详解
  4. 数据机房建设常用材料有哪些?
  5. 百度2011招聘笔试题+答案解析
  6. ALVのイベントを取得する方法
  7. Gridview的footer模板中放置控件实现添加功能
  8. 链接(了解)---Linux
  9. Linux系统常用命令(三)
  10. php 写博客教程,最近写了一个博客程序: QuickBlog PHP 开源的一文多发系统
  11. r 中文乱码_配置R语言环境,这一篇就够了!
  12. mac rz sz的使用
  13. 元宇宙游戏控制这几个因素,正确姿势解锁元宇宙游戏开发盈利痛点
  14. 李炎恢PHP高端培训视频教程
  15. 动词变名词的变化规则_高中英语动词变名词的变化规则
  16. game-of-life-master jenkins部署
  17. 分式智能计算机在线计算,全能智能计算器
  18. php zend optimizer 解密,zend guard对php代码加密 zend optimizer解析
  19. 2019暑期建模培训简单总结
  20. 【数据结构】悬空指针和野指针

热门文章

  1. 如何禁止百度自动转码?
  2. UI库你应该知道的基础(超实用)
  3. OCJP 考试题之七
  4. 怎么在PDF上修改文字,PDF修改文字的步骤
  5. Redis系列(六)
  6. 合肥工业大学计算机与信息学院学生会宗旨,合肥工业大学宣城校区第一届学生会成立大会召开...
  7. 从网页复制内容到富文本、或者富文本里自己加样式,当ajax传参时候,总是莫名其妙丢失变成无意义的html,究竟是为什么呢
  8. 行为识别笔记:iDT算法用法与代码解析
  9. HM4064原厂5A四节锂电池充电管理集成电路IC
  10. tail命令 – 查看文件尾部内容