我的印象是,MySQL通常不区分大小写,特别是在MS Windows中.在MySQL 8.0.34中,我运行了以下语句,最后一条语句出现错误.错误消息是"错误代码:1141.没有为主机‘%’上的用户‘USER1’定义这样的授权".一旦我将"USER1"更改为"USER1",它就起作用了."GRANT SELECT ON DB1.TABLE1 to USER1;"也不起作用.你能解释一下为什么吗?非常感谢.

DROP SCHEMA IF EXISTS db1;
CREATE SCHEMA db1;
USE db1;
CREATE TABLE Table1(
  productID INT primary key
);
DROP USER IF EXISTS user1;
CREATE USER user1 IDENTIFIED BY 'password111';
SHOW GRANTS FOR USER1;

我的系统的字符集和排序规则分别是‘utf8mb4’、‘utf8mb4_0900_ai_ci’.

推荐答案

https://dev.mysql.com/doc/refman/8.0/en/account-names.html

出于访问判断的目的,用户值的比较区分大小写.主机值的比较不区分大小写.

mysql.user表具有列user,该列将用户名存储在定义为使用二进制排序规则的列中.因此,它区分大小写.

mysql> show create table mysql.user\G
*************************** 1. row ***************************
       Table: user
Create Table: CREATE TABLE `user` (
  ...
  `User` char(32) COLLATE utf8mb3_bin NOT NULL DEFAULT '',
  ...

Mysql相关问答推荐

是否有一种方法可以 Select 表中具有特定列值的行,该行还显示phpmyadmin中原始表中的行号?

MySQL没有使用S隐式附加到此二级索引的主键

将上传文件的存储路径放在一张表中的缺点是什么?

global max_connections 和 spring.hikari.maximumPoolSize 有什么区别?

为什么order by子句可以利用索引?

MySQL Join 查询位置从订单

如何创建将行转换为列的 MySQL 查询?

MYSQL除以零警告,奇怪的行为

查询mysql中无法识别数据值

查找同时玩过这两种游戏的玩家

使用 MySQL 流式传输大型结果集

MySQL 5.6 DATETIME 不接受毫秒/微秒

获取Count(*)占GROUP BY中所有项目数的百分比

MySQL - 如何在 INSERT 语句中将字符串值解析为 DATETIME 格式?

NodeJS/mySQL - ER_ACCESS_DENIED_ERROR 用户'root'@'localhost'的访问被拒绝(使用密码:是)

MySQL - 在 MySQL UPDATE 或 SELECT 查询中使用 If Then Else

什么是全文索引,我应该什么时候使用它?

电话号码和地址的mysql数据类型

Mysql 错误:try 转储表空间时,指定为定义者的用户 ('mysql.infoschema'@'localhost') 不存在'

邮箱地址可接受的字段类型和大小?