MySQL 8.0.34中GRANT语句用户名大小写敏感问题咨询
MySQL 8.0.34 Windows下用户命名字母大小写问题原因解析
- 核心原因是MySQL用户名的大小写敏感性独立于业务库的字符集/排序规则,也不受控制库表名大小写的
lower_case_table_names参数影响,而是由系统库mysql中用户表的字段排序规则决定。 - MySQL 8.0默认情况下,
mysql.user表的User字段使用区分大小写的排序规则(如utf8mb4_0900_as_cs)。这意味着你创建的小写user1和大写USER1会被识别为两个完全不同的用户,所以执行SHOW GRANTS FOR USER1;时会提示找不到该用户,授权语句自然也无法生效。 - 你之前觉得Windows下MySQL不区分大小写,是因为
lower_case_table_names参数默认值为1,这个参数会让MySQL自动将库名、表名转为小写,从而表现出不区分大小写的特性,但这个规则仅作用于库表名,不适用于用户名。
可以通过以下语句验证mysql.user表的字段排序规则:
SHOW CREATE TABLE mysql.user;
查看结果中User字段的定义,会看到类似User varchar(32) COLLATE utf8mb4_0900_as_cs NOT NULL DEFAULT ''的内容,其中as_cs代表区分大小写的排序规则。
解决建议
- 操作用户名时严格保持大小写一致,创建时用小写,后续查询、授权等操作也统一使用小写;
- 不建议修改
mysql.user表的字段排序规则来强制用户名不区分大小写,这会破坏MySQL默认的权限管理逻辑,可能引发其他问题。
内容的提问来源于stack exchange,提问作者techfan
相关产品推荐
相关产品推荐

