现在位置: 首页 > 博客文章 > 电脑相关 > IT开发 > 数据库 > MySQL > 正文
设置 MYSQL 数据库编码为 utf8mb4
2021年03月02日 02:11:00 MySQL ⁄ 共 1373字 暂无评论 ⁄ 被围观 2,858次

utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,java程序中将报SQL异常:

java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\x94’ for column ‘name’ at row 1 

utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 
采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

1、查询当前数据库字符集

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

2、设置mysql配置文件/etc/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_general_ci 
init_connect='SET NAMES utf8mb4'

3、重启mysql服务

systemctl restart mysqld.service

MySQL 中字符集相关变量
character_set_client:客户端请求数据的字符集
character_set_connection:从客户端接收到数据,然后传输的字符集
character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,那就使用 character_set_server指定的字符集,这个变量建议由系统自己管理,不要人为定义。
character_set_filesystem:把操作系统上的文件名转化成此字符集,即把 character_set_client转换character_set_filesystem, 默认binary是不做任何转换的
character_set_results:结果集的字符集
character_set_server:数据库服务器的默认字符集
character_set_system:存储系统元数据的字符集,总是 utf8,不需要设置

4、数据库链接参数

characterEncoding=utf8mb4&autoReconnect=true

5、如果已经有数据库和表,可以修改字符集:

更改数据库编码:

ALTER DATABASE DATABASE_NAME CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

更改表编码:

ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 

原文链接:https://blog.csdn.net/tzhuwb/article/details/114283883

给我留言

留言无头像?