gpt4 book ai didi

mysql - MySQL 的字符串比较规则是什么?

转载 作者:行者123 更新时间:2023-11-29 01:39:33 26 4
gpt4 key购买 nike

为什么 SELECT * FROM users WHERE password='a'='mm'; 实际上返回行?

为什么 SELECT * FROM users WHERE password='1'='1'; 不起作用?

使用的确切相等运算符比较规则是什么?

更新(表格和行等信息):

mysql> show tables;
+------------------+
| Tables_in_shengy |
+------------------+
| users |
+------------------+
1 row in set (0.00 sec)

mysql> describe users;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| username | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> select * from users;
+----------+----------+
| username | password |
+----------+----------+
| victim | 123456 |
+----------+----------+
1 row in set (0.00 sec)

最佳答案

MySQL 将比较转换为 01

因此 password='a' 的计算结果为 0(除非 password 实际上是 'a ').

MySQL 还尝试通过将字符串从头开始转换为数字来比较字符串和数字。

因此 0abc 将被转换为 0abc 根本不是数字,也是 0

这意味着

password='a'='mm'

结果

0='mm'

因为 mm 没有任何前导数字,所以你得到

0=0

这是真的。

关于mysql - MySQL 的字符串比较规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310613/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com