我已经建立了一个MySQL数据库,并使用MySQL工作台创建了一个登录表。我使用的是MySQL 8.0服务器。
登录表由以下简单条目组成:
id username password
1 MyUser somePassword在执行以下任一SQL查询时,将检索登录表的单个条目:
SELECT * FROM my_database_schema.login WHERE username="MyUser";
SELECT * FROM my_database_schema.login WHERE username="myuser";但是,如果是username="MyUser",我只希望查询成功。换句话说:我希望我的SQL查询区分大小写。
正如评论中所指出的,这一问题似乎与数据库整理有关。因此,我试用了对评论中所提到的问题的答案之一。
我执行了以下查询以检查我当前的排序规则:
show variables like '%collation%';此查询得到以下答案:
Variable_name Value
collation_connection utf8mb4_0900_ai_ci
collation_database utf8mb4_0900_ai_ci
collation_server utf8mb4_0900_ai_ci
default_collation_for_utf8mb4 utf8mb4_0900_ai_ci 由于这不是区分大小写的排序规则,我知道我必须将其更改为utf8mb4_0900_as_cs。
为了实现这一点,我执行了以下两个查询:
-- Change database collation
ALTER DATABASE `my_database_schema` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;
-- Change table collation
ALTER TABLE `login` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs;MySQL工作台让我知道这些查询是成功的。不过,在执行第一个查询(即再次检查数据库排序规则)时,我获得了与前面相同的结果:我使用的是utf8mb4_0900_ai_ci。
有人能帮我理解一下吗?
===========================================================在链接问题中寻找更多可能的答案,我尝试了以下查询:
SELECT * FROM my_database_schema.login WHERE username= BINARY "MyUser";这就是诀窍!只有当用户名以正确的区分大小写的方式给出时,此查询才会成功.
但是,我不知道如何将此查询转换为HQL语句,即Hibernate所理解的查询。目前,我正在使用以下声明:
@Query("SELECT u FROM User u WHERE u.username=?1"),其中用户是表示我的登录表的类。
发布于 2022-01-28 02:14:42
与_cs或_bin一起使用排序规则。将其应用于所讨论的列。
数据库的排序规则是新表的默认设置。
表的排序规则是其中没有指定字符集和排序规则的任何列的默认排序规则。
要查找所有可用的排序规则,请执行以下操作:
SHOW COLLATION;https://stackoverflow.com/questions/70852566
复制相似问题