假如有表A:
| id | int |
|---|---|
| name | varchar |
A表中有以下数据:
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 2王五 |
执行以下sql:
select * from A where name = 0;
会将id=1,id=2的结果返回。
select * from A where name = 2;
会将id=3的结果返回。
为什么?
因为Mysql “Strings are automatically converted to numbers and numbers to strings as necessary”,字符串自动转换为数字,数字自动转换为字符串 。
当字符串和数字比较时,mysql会从字符串开头截取数字,没有数字的直接转成0。
不建议不同类型的数据进行比较。
本文探讨了MySQL中字符串和数字在比较时的自动转换规则。当不同类型的值进行比较时,MySQL会尝试将它们相互转换。例如,'2王五'与2比较时,仅比较开头的数字2。这种隐式类型转换可能导致意外的结果,因此建议避免不同类型的数据直接比较,以确保查询的准确性。了解这一特性对于优化SQL查询和避免潜在错误至关重要。
267

被折叠的 条评论
为什么被折叠?



