Warum gibt es in MySQL nur den Spaltennamen, aber keine Gleichheit mit dem Wert? Es handelt sich nicht um einen Syntaxfehler
P粉481815897
P粉481815897 2023-09-16 10:37:20
0
1
664

Warum ist eine solche Abfrage kein Syntaxfehler? Ich habe einen SQL Server-Hintergrund und war wirklich überrascht.

从 my_table WHERE id 中选择 *

Ich dachte, es würde bestätigen, dass es einen Wert hat, aber das Verhalten ist inkonsistent. Bei Verwendung von id wird der Standort mit id zurückgegeben, bei Verwendung von name wird jedoch nichts zurückgegeben:

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

P粉481815897
P粉481815897

Antworte allen(1)
P粉511896716

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

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

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

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

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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage