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的字符集的操作,感觉没用,也不想去证明了
最后附上校训