我偶然遇到了一个独特的问题
但在此之前,我想向您展示一个表结构
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'
而不是给我任何错误它显示第二元组
是不是应该抛出错误?
请有人澄清一下吗?
答案 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是否自动转换。