有一个项目需要存储ios的表情( emoji表情 )这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。在MySQL 5.6中,可以设置编码为utf8mb4,这个字符集是utf8的超集。
1.使用低版本的mysqljar会连接出错
换成 5.1.6
2.
因为JDBC驱动并不支持utf8mb4字符集,所以不能设置JDBC URL的characterEncoding
不过还有三种方式可以设置字符集
1.不显式设置字符集,继承服务器的配置
2.在执行SQL之前,运行set names 的查询 (Query方式)
3.设置MySQL init_connect参数
经过测试各种因素的结果如下所示:
总结:
1.修改了 character_set_server参数,需要重启数据库2.使用高版本的JDBC
不过还有三种方式可以设置字符集
1.不显式设置字符集,继承服务器的配置
2.在执行SQL之前,运行set names 的查询 (Query方式)
3.设置MySQL init_connect参数
经过测试各种因素的结果如下所示:
| JDBC版本 | 普通中文 | 苹果表情 |
服务器utf8编码 | 5.1.6 | 正常 | 插入报错 |
| 5.1.6 Query | 正常 | 正常 |
| 5.1.6 init_connect | 正常 | 插入报错 |
| 5.1.31 | 正常 | 插入报错 |
| 5.1.31 Query | 正常 | 正常 |
| 5.1.31 init_connect | 正常 | 插入报错 |
服务器utf8mb4编码 | 5.1.6 | 乱码 | 乱码 |
| 5.1.6 Query | 乱码 | 乱码 |
| 5.1.6 init_connect | 乱码 | 乱码 |
| 5.1.31 | 正常 | 正常 |
| 5.1.31 Query | 正常 | 正常 |
| 5.1.31 init_connect | 正常 | 正常 |
1.修改了 character_set_server参数,需要重启数据库2.使用高版本的JDBC