MySQL给出了奇怪的结果

Sag*_*hal 4 mysql

我的表中没有这种 ID,但 MySQL 仍在给我一个结果。当我放入我的 php 代码时,也会给出同样的结果。 在此处输入图片说明

ype*_*eᵀᴹ 13

有些 DBMS 是无所不能和无情的。当用户试图偏离正确的行为(由标准和 DBMS 文档定义)时,它们会在各种情况下发出大量警告和错误。

MySQL 是仁慈的,而且是充满爱心的。她正在努力帮助每个人。即使有人将字符串与整数进行比较,她也会认为用户可能更了解他在做什么,而且他可能是对的。不想让他绝望,她正在尝试——违反所有一致性和完整性法律——比较这两个无与伦比的东西。

而且 -哦,奇迹- 有时这两件事毕竟是一样的!如果一个是数字182(来自一id列,存储在 4 个字节中),另一个是182^%^&$$%$%$sjfhjs ^%^&%&*^$^%$^$需要 28的字符串怎么办。无论如何,当第二个从那些愚蠢的字符中截断时,它们看起来是一样的!


Ava*_*rkx 8

MySQL留下了深刻的印象。似乎为了进行类型比较,MySQL 隐式地将您传递给 where 子句的字符串文字转换为无符号整数。通过 MySQLCONVERT函数的实现机制,数据类型切换根本不会失败,在这种情况下,为您提供 182 值。这些链接显示了 CONVERT 函数行为的一些示例,非常糟糕,imo。