MySQL查询异常

时间:2014-07-24 08:58:30

标签: mysql

我偶然遇到了一个独特的问题

但在此之前,我想向您展示一个表结构

td_category

|---------------------------------------------------------------------|
|  category_id |  category_title  |  category_slug  |  p_cid          |
|---------------------------------------------------------------------|
|      1       |   Shirts         |   1-Shirts      |     0           |
|---------------------------------------------------------------------|
|      2       |   Jeans          |   2-Jeans       |     0           |
|---------------------------------------------------------------------|

现在,

category_id is INT and auto-increment value
category_title is VARCHAR
category_slug is VARCHAR

现在我所说的是,我错误地写了一个查询

SELECT * FROM td_category WHERE category_id = '2-Jeans'

而不是给我任何错误它显示第二元组

是不是应该抛出错误?

请有人澄清一下吗?

2 个答案:

答案 0 :(得分:1)

mysql执行int数据类型的隐式转换,因为哪个' 2-Jeans'被视为2-0(因为牛仔裤不是int类型,并且默认为0以获得兼容性,如文档here中所述)

因此,解析器解释的最终查询如下:

SELECT * FROM td_category WHERE category_id = 2;

答案 1 :(得分:0)

以下查询将id为2,这是您的第一个字符并显示第二条记录

SELECT * FROM td_category WHERE category_id = '2-Jeans'

尝试此查询将返回第一条记录

SELECT * FROM td_category WHERE category_id = '1-Jeans'

2-jeans被视为2,因此返回第二条记录,1-jeans被视为1,因此请返回第一条记录。

在mysql中检查Manual是否自动转换。