繁体   English   中英

带字符串搜索的MySQL整数列返回无效结果

[英]MySQL integer column with string search returns the invalid result

谁能帮助我了解MySQL选择查询行为并帮助我解决此问题,

如何显示基于用户搜索的未找到结果的消息?

表结构:

CREATE TABLE `dummytable` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mobile` int(11) NOT NULL,
  `welcome` varchar(150) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1

在此处输入图片说明

问题 :为什么我得到这个结果?

SELECT * FROM `dummytable` WHERE `mobile` = '\'\'' LIMIT 50


在此处输入图片说明

mobile列被声明为整数。 当MySQL将整数与字符串进行比较时,它将字符串转换为数字-而不是相反。

MySQL如何做到这一点? 它将前导数字字符转换为数字。 您的条件是:

WHERE mobile = ''''

(将单引号放在字符串中的传统SQL方法是将其加倍。)

单引号不是数字字符,因此转换结果为0 因此,这就是您得到的结果。

您的mobil列是一个整数列。 因此,一切都转换为int。 空字符串将转换为0(我认为其他不以数字开头的字符串也将转换为零)

执行完该查询后,MySQL向您显示一条警告消息:

mysql> select * from foo where bar_integer='\'\''

....

10 rows in set, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1292 | Truncated incorrect DOUBLE value: 'okay' |
+---------+------+------------------------------------------+

MySQL会尝试将您的字符串值转换为目标类型(整数),如果转换失败,则mysql会将其值解释为0,这将得出您所看到的结果。

如果打开MySQL严格模式,此查询将产生错误,而不是进行隐式强制转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM