Mysql修改utf8mb4编码,支持emoj图标存储

问题原因

数据库保存数据时抛出如下异常:

### Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A ' for column 'prob_desc' at row 1
; uncategorized SQLException for SQL []; SQL state [HY000]; error code [1366]; Incorrect string value: '\xF0\x9F\x98\x8A ' for column 'prob_desc' at row 1; nested exception is java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x8A ' for column 'prob_desc' at row 1

在当代互联网应用中经常会出现emoj图标,它们在应用中会被转化成特定的字符格式utf8mb4,这种字符编码跟utf8不一样。utf8无法保存utf8mb4的数据。所以我们的数据库编辑需要统一成utf8mb4来保存。

mysql配置方式

  1. 在配置文件中,配置全局服务器字符编码
# 编辑配置文件
vi /etc/my.cnf
# 增加如下配置
character_set_server=utf8mb4
  1. 创建schema的时候选择utf8mb4字符集
CREATE SCHEMA `xxx` DEFAULT CHARACTER SET utf8mb4;
  1. 如果之前的字符集不是utf8mb4,那么可以单独手工修改表或者字段的字符编码
# 修改表的字符集
ALTER TABLE `xxx`.`yyy` 
CHARACTER SET = utf8mb4 , COLLATE = utf8mb4_general_ci;
# 修改字段的字符集
ALTER TABLE `xxx`.`yyy` 
CHANGE COLUMN `zzz` `zzz` VARCHAR(64) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci' NULL DEFAULT NULL COMMENT 'comment';

你可能感兴趣的:(数据库_mysql,mysql,emoj图标,数据乱码)