mysql如何支持发表情
报错信息:
com.jfinal.plugin.activerecord.ActiveRecordException: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\xB3'
for column 'content' at row 1
问题根源:
一般我们用mysql,都会把mysql设置成utf8编码,而utf8编码只支持3个字节,但是,手机的表情包是4个字节的,因此导致表情保存到数据库就会报错;
windows解决方案:
1、 对于windows的版本 5.7.20,C:\ProgramData\MySQL\MySQL
Server 5.7\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'
然后在我的电脑右键---管理---服务---找到mysql,然后右键重启,在mysql客户端用
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';语句查看编码是否已经是utf8mb4了,正常如下:
然后把项目中的数据库配置jdbcUrl=jdbc:mysql://ip/apiweb?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull,改成
jdbcUrl=jdbc:mysql://ip/apiweb?zeroDateTimeBehavior=convertToNull,也就是不要characterEncoding了;
然后把之前需要保持表情的表的编码改一下:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
到这里就顺利搞掂了。
2、对于mysql5.5.5版本,如果用上面的方法可以,那最好了,如果不行,则到
C:\Program Files\MySQL\MySQL Server 5.5\bin里面,双击MySQLInstanceConfig.exe,然后一直下一步,知道选择编码的时候,改成utf8mb4,
注意,选项是没有utf8mb4编码的,只能手工输入,然后一直默认下一步即可;
然后把之前需要保持表情的表的编码改一下:
ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
其实最终并没有全部把编码改成utf8mb4:
但是到这里也顺利搞掂了。
linux解决方案:
其实linux的方法1差不多,只是linux里面不是改my.ini配置了,而且改/etc/my.cnf 编码了,
重启也是用命令重启,重启mysql命令为:service mysqld restart
到这里也全部搞掂。
另外,其实也可以没必要整个表都转成utf8mb4,也可以
将需要使用emoji的字段设置类型为:
命令:ALTER TABLE `TABLE_NAME` MODIFY COLUMN `COLUMN_NAME` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
另外,如果想把整个数据库都修改成utf8mb4编码的话,可以用一下语句:
ALTER DATABASE dcs_app CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
喜欢的朋友,记得点赞哦