mysql 部分字符存储报错 Incorrect string value问题解决
原因分析
正常情况 utf-8 是一种可变长度的字符集,它的单个字符的长度范围可以在1~4字节之间变化。由于其支持字符范围广并且传输效率高而被广泛使用。虽然在 Windows 中我们默认用的还是 gbk字符集 ,但是在使用浏览器浏览网站的时候大部分网站其实已经在广泛使用 utf-8字符集了。
而在 MySQL 当中由于一些历史原因,其直接支持的 utf-8 格式并非完全版的 utf-8。简单来说MySQL中的utf-8字符集并不完全支持utf-8具体表现就是只能保存最长字节为三字节的字符,而对于四字节编码的字符时,就会无法保存,并且抛出 Incorrect string value异常来声明"你输入了我无法识别的字符"。
为了解决无法保存四字节编码的utf-8字符的问题,MySQL在5.3.3版本时推出了 utf8mb4字符集。因此我们在使用时如果存在目标字段值中有emoji或者生僻字的情况时,最好使用 utf8mb4 字符集建表。
复现
CREATE TABLE tb_description(
id int(11) AUTO_INCREMENT COMMENT '主键',
description varchar(1024) COMMENT '评论',
create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY(id)
)engine=InnoDB,charset=utf8;
INSERT INTO tb_description(description) VALUES("学到了😁");
解决办法
CREATE TABLE tb_description(
id int(11) AUTO_INCREMENT COMMENT '主键',
description varchar(1024) COMMENT '评论',
create_time datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY(id)
) engine=InnoDB,DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
在客户端插入前,设置编码,插入成功
SET NAMES utf8mb4;
INSERT INTO tb_description(description) VALUES("学到了😁");
jdbc连接设置
jdbc.url=jdbc:mysql://xxx:3306/xx?useUnicode=true&characterEncoding=utf8mb4
如果Jfinal
jdbcUrl=jdbc:mysql://127.0.0.1:3306/blog
DruidPlugin 初始化后指定编码
-
DruidPlugin druidPlugin = getDruidPlugin();
-
//指定编码为utf8mb4
-
druidPlugin.setConnectionInitSql("set names utf8mb4");
-
-
me.add(druidPlugin);
来源
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhggfihk
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13