MySQL查询,其中id=id\u产品错误
我正在nodejs网络应用程序中使用mysql。我不明白为什么当我要求一些MySQL查询,其中id=id\u产品错误,mysql,Mysql,我正在nodejs网络应用程序中使用mysql。我不明白为什么当我要求一些id(键)时,它会给我不止一个结果 当我: SELECT * FROM products WHERE id = 1; 如果发生这种情况,我会得到3个结果,但我只想要1个: 1、001和0000001 我只需要一个产品的信息(id:1,在本例中为) 我如何解决这个问题? ID类型为varchar(20) 如果我使用像而不是=我的结果会改变: SELECT * FROM products WHERE id LIKE 0000
id
(键)时,它会给我不止一个结果
当我:
SELECT * FROM products WHERE id = 1;
如果发生这种情况,我会得到3个结果,但我只想要1个:1
、001
和0000001
我只需要一个产品的信息(
id:1,在本例中为
)
我如何解决这个问题?ID类型为varchar(20) 如果我使用
像
而不是=
我的结果会改变:
SELECT * FROM products WHERE id LIKE 0000001;
我得到的是id=1
的信息,而不是0000001
。不知道为什么
谢谢,MySQL(以及现实世界)中的数字没有前导零。字符串可以
因此,您只需使用正确的类型进行比较:
SELECT *
FROM products
WHERE id = '1';
原始查询的结果是id
被转换为一个数字。和'1'
,'001'
和'0000001'
都转换为相同的整数--1
。因此,所有三个都通过了过滤器。MySQL(以及现实世界)中的数字没有前导零。字符串可以
因此,您只需使用正确的类型进行比较:
SELECT *
FROM products
WHERE id = '1';
原始查询的结果是
id
被转换为一个数字。和'1'
,'001'
和'0000001'
都转换为相同的整数--1
。因此,所有三个都会通过过滤器。问题在于,您正在使用整数强制转换按varchar类型查找
尝试向id参数添加引号:
SELECT * FROM products WHERE id = '1';
如果要添加带前导零的整数ID,建议您使用zerofill选项:
如果要使用字母数字值,则将ID类型保留为varchar,但请记住将搜索参数括在引号中。问题在于,您正在使用整数强制转换按varchar类型查找 尝试向id参数添加引号:
SELECT * FROM products WHERE id = '1';
如果要添加带前导零的整数ID,建议您使用zerofill选项:
如果要使用字母数字值,则将ID类型保留为varchar,但请记住将搜索参数括在引号中。查询的
WHERE
子句包含文字数字值与字符串(列ID
)的比较
当需要比较不同类型的值时,MySQL使用几个规则将一个或两个值转换为公共类型
有些问题是不直观的。最后一条规则是唯一匹配整数与字符串比较的规则:
在所有其他情况下,参数作为浮点(实数)数进行比较
当它们转换为浮点(实数)数时,1
(整数)、'1'
、'0001'
和'0000001'
都是相等的
为了获得精确匹配,您在查询中输入的文本值必须与列id
(即字符串)具有相同的类型。查询应为:
SELECT * FROM products WHERE id = '1'
查询的
WHERE
子句包含文本数值与字符串(列id
)的比较
当需要比较不同类型的值时,MySQL使用几个规则将一个或两个值转换为公共类型
有些问题是不直观的。最后一条规则是唯一匹配整数与字符串比较的规则:
在所有其他情况下,参数作为浮点(实数)数进行比较
当它们转换为浮点(实数)数时,1
(整数)、'1'
、'0001'
和'0000001'
都是相等的
为了获得精确匹配,您在查询中输入的文本值必须与列id
(即字符串)具有相同的类型。查询应为:
SELECT * FROM products WHERE id = '1'
您的
id
列的数据类型是什么?我的答案已经被另一个用户以类似的形式粘贴到下面。您的id
列的数据类型是什么?我的答案已经被另一个用户以类似的形式粘贴到下面。id的数据类型是varchar。所以它不起作用。有什么办法可以解决吗?或者这是一个糟糕的实现?@Baumann。修理什么?这似乎回答了你的问题。如果需要另一个值,则将其用作字符串:'0001'
。id的数据类型为varchar。所以它不起作用。有什么办法可以解决吗?或者这是一个糟糕的实现?@Baumann。修理什么?这似乎回答了你的问题。如果您需要另一个值,则将其用作字符串:'0001'
。您是对的。这是个老项目,我得改进一下。我不熟悉代码和数据库。谢谢,你说得对。这是个老项目,我得改进一下。我不熟悉代码和数据库。谢谢,我现在拿到了。解释得很好,我现在明白了。解释得很好。