设置 MYSQL 数据库编码为 utf8mb4
utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,java程序中将报SQL异常: java.sql.SQLException: Incorrect string value: ‘xF0x9Fx92x94’ 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;
下一篇:
MySQL架构原理之存储引擎