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了,正常如下:

mysql如何支持发表情

然后把项目中的数据库配置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:

mysql如何支持发表情

但是到这里也顺利搞掂了。

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;



喜欢的朋友,记得点赞哦mysql如何支持发表情