特殊字符编码格式数据库不支持
字符编码格式数据库不支持
- 原数据库字符集设置为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 一方面可能是历史包袱,另一方面估计也是为了省空间
特殊字符编码格式数据库不支持相关推荐
- mysql特殊字段名称_Mysql必读MySQL创建带特殊字符的数据库名称方法示例
<MysqL必读MysqL创建带特殊字符的数据库名称方法示例>要点: 本文介绍了MysqL必读MysqL创建带特殊字符的数据库名称方法示例,希望对您有用.如果有疑问,可以联系我们. 文章抓 ...
- 支持纳管Redis数据库,支持查看、连接和会话审计Kubernetes Pod,JumpServer堡垒机v2.18.0发布
2022年1月24日,JumpServer开源堡垒机正式发布v2.18.0版本.在这一版本中,JumpServer新增支持纳管Redis数据库,支持查看.连接.操作和会话审计Kubernetes Po ...
- 关于微信名称特殊字符存数据库出问题; Incorrect string value: ‘\xF0\x9F\x90\xAF’ for column ‘nickName’ at row 1
首先说一下为啥会出现这个问题: 我们的数据库编码通常为UTF8,MYSQL的UTF8编码最多3个字节,EMOJI表情或者某些特殊字符的编码是4个字节,导致存入数据库时发生了异常. 解决办法: 1. 修 ...
- mysql数据库特殊字符_MySQL创建带特殊字符的数据库名称方法示例
前言 这篇文章抓哟讲解了关于如何实现在MySQL中创建带有特殊字符的数据库名称,这里的特殊字符包含:!@#$%^ 方法如下 使用反引号`将数据库名称包含住,反引号`(使用引号是不可以的)即在英文输入法 ...
- mysql 数据库名称 特殊字符_Mysql必读MySQL创建带特殊字符的数据库名称方法示例...
<Mysql必读MySQL创建带特殊字符的数据库名称方法示例>要点: 本文介绍了Mysql必读MySQL创建带特殊字符的数据库名称方法示例,希望对您有用.如果有疑问,可以联系我们. MYS ...
- [flask实践] 解决mysql数据库不支持中文的问题
[flask实践] 解决mysql数据库不支持中文的问题 参考文章: (1)[flask实践] 解决mysql数据库不支持中文的问题 (2)https://www.cnblogs.com/xiaozh ...
- 数据库中间件支持数据库集群方案
咏南数据库中间件支持数据库集群方案 通过咏南数据库中间件作为PROXY(数据库代理)实现的数据库集群,非数据库层面集群. 数据库可以分库分表进行水平或垂直拆分成数据库集群. 咏南中间件作为数据库集群代 ...
- mysql支持的平台和操作系统_MySQL 数据库所支持的操作系统_MySQL
MySQL数据库所支持的操作系统: 我们使用GNU Autoconf,因此将MySQL移植到所有使用Posix线程和C++编译器的现代系统是可能的.(要求服务器支持线程.如果只是编译客户端代码,则只需 ...
- mysql数据库增加模块_使用bind-mysql模块增加对mysql数据库的支持
对于bind,如果想修改或增加dns记录,是直接修改文本的,这样的话一方面不方面管理,另一方面容易出错,如果我们增加对mysql数据库的支持,再配合php或perl,python等程序直接操作mysq ...
最新文章
- 使用python中的Matplotlib绘图示例(续)
- 「golang」panic: commands out of sync. Did you run multiple statements at once
- 计算机专业名词术语raid,RAID中的9个专业术语详解
- 数据机房建设常用材料有哪些?
- 百度2011招聘笔试题+答案解析
- ALVのイベントを取得する方法
- Gridview的footer模板中放置控件实现添加功能
- 链接(了解)---Linux
- Linux系统常用命令(三)
- php 写博客教程,最近写了一个博客程序: QuickBlog PHP 开源的一文多发系统
- r 中文乱码_配置R语言环境,这一篇就够了!
- mac rz sz的使用
- 元宇宙游戏控制这几个因素,正确姿势解锁元宇宙游戏开发盈利痛点
- 李炎恢PHP高端培训视频教程
- 动词变名词的变化规则_高中英语动词变名词的变化规则
- game-of-life-master jenkins部署
- 分式智能计算机在线计算,全能智能计算器
- php zend optimizer 解密,zend guard对php代码加密 zend optimizer解析
- 2019暑期建模培训简单总结
- 【数据结构】悬空指针和野指针