天天看点

最简单,最快方式 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)

最简单,最快方式 Mysql兼容 emoji正文根本问题所在所在,

从 图1 变为 图2 (下图2)

最简单,最快方式 Mysql兼容 emoji正文根本问题所在所在,

打开数据库 在表上 右键 设计表 然后选择字段 就会出现图中设置

`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的字符集的操作,感觉没用,也不想去证明了

最后附上校训

理论结合实践