java+mysql 实现储存表情功能
author:zj
备注:关于utf8不支持emoji是因为emoji是用4个字节存储的字符,而mysql的utf8只能存储1-3个字节的字符。那就存不了呗
1,根据自身需要修改对应需要存放表情的表或字段
查看数据库的编码格式情况 SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
查看数据表的编码格式 show create table <表名>;
修改数据库的编码格式 mysql>alter database <数据库名> character set utf8mb4;
修改数据表格编码格式 alter table <表名> character set utf8mb4;
修改字段编码格式 alter table <表名> change <字段名> <字段名> <类型> character set utf8mb4;
2,修改数据库mysql对应的配置文件
1,修改mysql配置文件my.cnf(windows为my.ini【位置:C:\ProgramData\MySQL\MySQL Server 5.7\my.ini】)
如果不知道配置文件在哪里的话可以根据一下命令查找:
mysqld --verbose --help|grep -A 1 'Default options'
或者是执行:
mysql --verbose --help|grep -A 1 'Default options'
从上图可以看出, 服务器首先会读取/etc/my.cnf文件,如果发现该文件不存在,再依次尝试从后面的几个路径进行读取。
2,修改内容
my.cnf一般在etc/mysql/my.cnf位置。找到后请在以下三部分里添加如下内容:
[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'
3,修改配置文件后保存,并重启mysql服务
service mysqld restart
或
service mysql restart
3,数据库连接参数配置
数据库连接参数中:
characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。
而autoReconnect=true是必须加上的
如下:
spring.datasource.url = jdbc:mysql://localhost:3306/card_new?allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
4,对应版本要求
如果经前面三部后还是任然无法正常插入表情的话,那么则可能是对应的数据库版本或者连接数据库的驱动版本比较低导致
1,utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。
MySQL在 5.5.3 之后增加了 utf8mb4 字符编码,mb4即 most bytes 4。简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符。
但抛开数据库,标准的 UTF-8 字符集编码是可以用 1~4 个字节去编码21位字符,这几乎包含了是世界上所有能看见的语言了。
然而在MySQL里实现的utf8最长使用3个字节,也就是只支持到了 Unicode 中的 基本多文本平面 (U+0000至U+FFFF),包含了控制符、拉丁文,中、日、韩等绝大多数国际字符,
但并不是所有,最常见的就算现在手机端常用的表情字符 emoji和一些不常用的汉字,如 “墅” ,这些需要四个字节才能编码出来。
http://www.zuimoban.com/jiaocheng/mysql/11256.html
2,Mysql驱动:
5.1.34可用,最低不能低于5.1.13
到此那么大功告成;
java 技术交流群:317628801