1.排查数据库所有属性的字符编码
SHOW VARIABLES LIKE '%character%';

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,不需要设置
character_sets_dir:字符集的安装目录
2.排查排序规则
SHOW VARIABLES LIKE 'collation%';

执行该命令后,通常会返回以下三个核心变量的值,它们分别代表了连接、数据库和服务器级别的默认排序规则:
collation_connection: 当前客户端连接所使用的排序规则。
collation_database: 当前选定数据库的默认排序规则。
collation_server: MySQL 服务器启动时设置的默认排序规则。
这些排序规则决定了字符如何进行比较和排序,例如是否区分大小写、是否处理重音符号等。常见的排序规则包括 utf8mb4_0900_ai_ci(MySQL 8.0 默认,不区分大小写、忽略重音)和 utf8mb4_unicode_ci(更符合 Unicode 标准的排序)。
3.查看数据库函数或数据库表的排序规则
show create table system_department;

SHOW table STATUS LIKE 'system_department';

数据库函数排序规则

4.定位问题:数据库函数排序规则是utf8mb3,而数据库排序规则collation_database是utf8mb4_general_ci
(1)执行set collation_server = utf8mb3_general_ci;修改数据库排序规则。
或者
(2)修改函数排序规则,将函数里的排序规则语句改为CHARSET utf8mb4 COLLATE utf8mb4_general_ci

浙公网安备 33010602011771号