Maison  >  Questions et réponses  >  le corps du texte

Pourquoi n'y a-t-il qu'un nom de colonne mais aucun élément égal à la valeur dans MySQL ? Ce n'est pas une erreur de syntaxe ?

Pourquoi une telle requête n’est-elle pas une erreur de syntaxe ? J'ai une expérience SQL Server et j'ai été vraiment surpris.

从 my_table WHERE id 中选择 *

Je pensais que cela validerait qu'il a une valeur, mais le comportement est incohérent, lors de l'utilisation de id, il renvoie l'emplacement avec id , mais lors de l'utilisation de name, il ne renvoie rien :

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

P粉481815897P粉481815897399 Il y a quelques jours626

répondre à tous(1)je répondrai

  • P粉511896716

    P粉5118967162023-09-17 00:12:37

    MySQL a certains comportements qui ne sont pas conformes à la norme ANSI SQL. Dans ce cas, MySQL traite la valeur entière zéro comme false,将任何整数非零值视为 true. En SQL standard, les entiers ne sont pas les mêmes que les booléens, mais dans MySQL, ils le sont.

    Lorsque vous exécutez la requête WHERE id时,它会返回id <> 0 la ligne.

    Lorsque vous exécutez une requêteWHERE name, elle évalue la chaîne comme un entier, ce qui signifie prendre la valeur numérique du premier caractère numérique (le cas échéant) et ignorer les caractères non numériques suivants. S'il n'y a pas de chiffres en tête, la chaîne a une valeur entière de 0.

    Lorsque vous exécutez une requêteWHERE name时,仅当该列中存储的字符串具有非零前导数字时,它才会返回行。在您的示例 'outro', elle renverra des lignes uniquement si la chaîne stockée dans cette colonne a un nombre non nul. Dans votre exemple 'outro' il ne contient que des chiffres, donc la valeur est zéro et la condition ne peut pas être satisfaite.

    MySQL se comporte comme prévu, mais ce n'est pas du SQL standard.

    répondre
    0
  • Annulerrépondre