报错: ### Error querying database. Cause: java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,COERCIBLE)
MySQL 8.0引入了一些新的字符集和排序规则,并对现有的进行了改进。在MySQL 8.0中,字符集和排序规则的处理方式有所变化,主要包括以下几点:
-
UTF8MB4字符集默认设置: MySQL 8.0将UTF8MB4字符集作为默认字符集,以支持存储Unicode字符。这对于支持多语言的应用程序非常重要,因为UTF8MB4可以存储更广泛的字符范围,包括emoji表情符号等。
-
默认排序规则的变化: MySQL 8.0中默认的排序规则由utf8mb4_general_ci改为utf8mb4_0900_ai_ci,以提供更准确的排序。
-
新的字符集和排序规则: MySQL 8.0引入了一些新的字符集和排序规则,以满足不同语言和场景的需求。例如,utf8mb4_0900_ai_ci提供了更好的Unicode支持,适用于各种语言的排序。
-
性能改进: MySQL 8.0对字符集和排序规则的实现进行了优化,提高了性能和效率。
当升级到MySQL 8.0时,需要注意这些变化,特别是对于已有的数据库和应用程序。确保你的应用程序和数据库配置与新的默认设置兼容,并根据需要进行调整。
- 查询数据库版本
select version();
- 查询数据库字符集
show variables like 'character%';
- 查询表字符集
SELECT TABLE_NAME, TABLE_COLLATION
FROM information_schema.TABLES
WHERE table_schema = 'table_schema' AND TABLE_COLLATION = 'utf8mb4_unicode_ci';
- 批量生成修改表字符集为 utf8mb4 的SQL语句
SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4;')
FROM information_schema.TABLES
WHERE table_schema = 'table_schema' AND TABLE_COLLATION = 'utf8mb4_unicode_ci';