问题背景
今天在开发自己的小程序时候,在苹果手机上输入了一个表情,结果出现了错误,查看后台报错如下: java.sql.SQLException: Incorrect string value: '\xF0\x9F\xA7\xA7' for column 'content' at row 1
问题分析
出现这个错误,可以从他的异常信息看出是SQL异常了,然后在后面会有一个'\xF0\x9F\xA7\xA7' for column 'content' at row 1,说明是在content字段插入了一个4字节的emoji表情,出现错误了。
数据中包含的emoji表情字符,通常的情况下,Mysql数据编码格式为“utf-8”,对于我们汉字来说也是足够用的,但是mysql中的utf8占用的是3个字节,此时,三个字节对于emoji表情符号就是完全不够用的了;它需要的是4个字节,所以,此时的utf8会报错上文提到的Incorrect string value: '\xF0\x9F\xA7\xA7' for column 问题。
解决方案
这里提供两种解决方案
-
修改mysql的编码格式 utfmb4编码其实是utf8编码的超集,他是兼容utf8的,并且能够存储4个字节emoji表情字符了。
首先,修改mysql的配置文件:usr/local/mysql/bin/my.ini,然后添加如下的内容:
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] character-set-client-handshake=FALSE character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci init_connect=‘SET NAMES utf8mb4’
然后,重启数据库
在linux中:service mysql restart
在windows中:
net stop mysql net start mysql
最后,修改数据编码格式更改为utf8mb4 执行sql: ALTER TABLE t_leave_word CONVERT TO CHARACTER SET utf8mb4
-
通过我们的代码来实现4字节的字符进行转换
这里代码就不贴了,因为这种方案几乎没人用了,毕竟第一种方案是最简但方便的,为什么还要去撸代码实现转化呢?
对于那些想要代码的,可以私信我,亦或者去找度娘吧,他那肯定有的!
对于阿里云购买的数据库怎么搞呢?
这里也不着急,进入阿里云官网后台,控制台中选择数据库实例管理页面,找到参数管理,将他的character_set_server修改为utf8mb4,提交参数,重启数据库即可。
这里就搞定了,欢迎大家留言交流,也欢迎大家关注我的工种昊《coder练习生》