最简单,最快方式 Mysql兼容 emoji
Mysql -> mybatis -> spring boot -> java
序:
最近写一个类似成人商城的项目 ,
写了一半的时候,发现用户如果通过苹果手机发送EMOJI的表情会无法插入数据库:
=== Error updating database. Cause: java.sql.SQLException: Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1
=== The error may involve cc.mb18.starshow.dbdto.TPageCoreDAO.intoComment-Inline
=== The error occurred while setting parameters
=== SQL: INSERT INTO t_page_comment
(useruuid
,username
, faceurl
, comment
, pageuuid
, createDatetime
) VALUES (?,?, ?, ?, ?, ?)
=== Cause: java.sql.SQLException: Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1
; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1; nested exception is java.sql.SQLException: Incorrect string value: 'xF0x9Fx92x9ExE5x80...' for column 'comment' at row 1`
类似的报错.
然后网上找了一堆 需要改数据库配置的方案,但是看完以后,我就否决了这个实施的方法,虽然项目没有上线,还在开发阶段,但是,动辄修改数据库配置文件这种操作,作为一个有 自我DBA限制的人,我怎么会这样做.
正文
平时管理数据库的时候 都是使用Navicat for Mysql的
所以 以12版本为例
根据文章的学习,虽然不能按照修改数据库配置的操作 但是却找到了
根本问题所在所在,
修改数据库承接字符集,但是修改可以设定范围,
数据库级修改 还是 表级修改 还是字段级修改
我最后选择了字段级修改 附图如下
从 图1 变为 图2 (下图1)
从 图1 变为 图2 (下图2)
打开数据库 在表上 右键 设计表 然后选择字段 就会出现图中设置
`ALTER TABLE t_page_comment
MODIFY COLUMN comment varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL AFTER sername;`
因为我数据库语句不是很熟 所以我只是把软件的代码截取出来给大家参考
至此 mysql 支持 emoji的操作就完成了
另外 我为了保险起见 在@Update("set names utf8mb4")
void setCharsetToUtf8mb4();
我在Dao里面做了一个设置当前SESSION的字符集的操作,感觉没用,也不想去证明了
最后附上校训
理论结合实践

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【思维导图-索引篇】搞定数据库索引就是这么简单
该文已加入开源文档:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识)。地址:https://github.com/Snailclimb/JavaGuide. 思维导图-索引篇 系列思维导图源文件(数据库+架构)以及思维导图制作软件—XMind8 破解安装,公众号后台回复:“思维导图” 免费领取!(下面的图片不是很清楚,原图非常清晰,另外提供给大家源文件也是为了大家根据自己需要进行修改) 下面是我补充的一些内容 为什么索引能提高查询速度 以下内容整理自: 地址: https://juejin.im/post/5b55b842f265da0f9e589e79 作者 :Java3y 先从 MySQL 的基本存储结构说起 MySQL的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表 每个数据页中的记录又可以组成一个单向链表 每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录 以其他列(非主键)作为搜索条件:只能从最小记录开始依...
- 下一篇
正则表达式真的很骚,可惜你不会写!
本文旨在用最通俗的语言讲述最枯燥的基本知识 文章提纲: 1.元字符 2. 重复限定符 3. 分组 4.转义 5. 条件或 6. 区间 正则表达式在几乎所有语言中都可以使用,无论是前端的JavaScript、还是后端的Java、c#。他们都提供相应的接口/函数支持正则表达式。 但很神奇的是:无论你大学选择哪一门计算机语言,都没有关于正则表达式的课程给你修,在你学会正则之前,你只能看着那些正则大师们,写了一串外星文似的字符串,替代了你用一大篇幅的if else代码来做一些数据校验。 既然喜欢,那就动手学呗,可当你百度出一一堆相关资料时,你发现无一不例外的枯燥至极,难以学习(实话说,当年不理君也是这样的心态)。 下面,不理君尝试用一种比较通俗点的方式讲一下正则,让你能在读完之后,能自己写出一些简单的正则,再不济,能看到别人写的正则,那也不错了。 1.元字符 万物皆有缘,正则也是如此,元字符是构造正则表达式的一种基本元素。 我们先来记几个常用的元字符: 元字符 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,CentOS8安装Elasticsearch6.8.6
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址