我对 PHP 和 MySQL 有疑问:
有帐号的用户:
username: StAr
password: 4LasK4
可以登录:
username: star
password: 4lask4
不尊重大写字母。
可能是什么问题?
谢谢
排序规则确定两个字符串是否相等。您应该将用户名和密码列的排序规则更改为区分大小写或二进制。例如:
alter table TableName modify username varchar(xx) collate utf8_bin,
modify password varchar(xx) collate utf8_bin;
检查列定义并确保您的排序规则不区分大小写 (ci)。你可以试试这个:
alter table your_table modify username varchar(xx) collate utf8_bin
许多 MySQL 安装具有 utf8_general_ci 的默认排序规则设置。这使得这两个操作产生完全相同的结果。
SELECT * from users WHERE name = 'StAr'
SELECT * from users WHERE name = 'star'
您可以尝试更改数据库中名称列的排序规则。或者您可以使用这样的查询:
SELECT * from users WHERE name = 'StAr' COLLATE utf8_bin
此 utf8_bin 排序规则比较精确相等。但是,如果将 COLLATE 放在查询中,则可能会禁用查询的索引并导致 MySQL 性能问题。