为什么 MySQL 中只有列名而没有等于值的 where 不是语法错误
P粉481815897
P粉481815897 2023-09-16 10:37:20
0
1
656

为什么这样的查询不是语法错误?我有 SQL Server 背景,我真的很惊讶。

从 my_table WHERE id 中选择 *

我认为它会验证它是否具有值,但行为并不一致,使用 id 时它会返回具有 id 的位置,但使用 name 时它不会返回任何内容:

https://www.db-fiddle.com/f/enWGyAW4BtLC64PVzkbTVK/0

P粉481815897
P粉481815897

全部回复(1)
P粉511896716

MySQL 有一些不符合标准 ANSI SQL 的行为。在这种情况下,MySQL 将整数零值视为 false,将任何整数非零值视为 true。在标准 SQL 中,整数与布尔值不同,但在 MySQL 中却是。

当您运行查询WHERE id时,它会返回id 0的行。

当您运行查询WHERE name时,它将字符串计算为整数,这意味着采用前导数字字符(如果有)的数值,并忽略任何后续的非数字字符。如果没有前导数字,则字符串的整数值为 0。

当您运行查询WHERE name时,仅当该列中存储的字符串具有非零前导数字时,它才会返回行。在您的示例 'outro' 中,它只有非数字,因此该值为零,并且无法满足条件。

MySQL 的行为符合设计,但这不是标准 SQL。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板