一、MySQL数据库:
1. 修改my.cnf:
[mysqld]
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
2. 修改数据库和表支持utf8mb4,如果已经是了就不用修改了:
alter database db_name default CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
二、JDBC连接池相关配置:
url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8mb4_0900_ai_ci"
connectionInitSqls="SET NAMES utf8mb4 COLLATE utf8mb4_0900_ai_ci"
🔥为什么是characterEncoding=UTF-8而不是utf8mb4?
utf8mb4不是JVM的字符集名称,它只是MySQL对完整UTF-8实现的称呼。在JVM和Java中,我们只需要使用标准的 UTF-8 字符集。
MySQL中的utf8mb4 = 完整的UTF-8实现(支持4字节字符,如emoji)
Java/JVM中的UTF-8 = 完整的UTF-8实现(天然支持所有Unicode字符)
总结
Java端:使用 characterEncoding=UTF-8,通过 SET NAMES utf8mb4 告诉MySQL使用utf8mb4字符集
MySQL端:确保数据库、表、字段的字符集都是 utf8mb4