无论我输入什么,MySQL都会返回结果! :(

时间:2013-02-03 12:21:42

标签: mysql

我有一个用户表,其中包含一个自动增量用户标识字段,我想将其用作登录ID。 userid字段的格式为1,2,3,4,5,...等。

但是当我做一个选择语句时:

SELECT * FROM user WHERE userid='0001'

以上语句返回userid'1'的信息。无论我在'1'前面放了多少'0',我总是会得到用户'1'的记录

我是否可以知道如果仅在匹配确切的用户ID时返回结果我会如何得到它(即,当我键入userid=1而不是userid=00000001)时,返回用户id的用户记录?

如果我没有清楚地解释清楚,我很抱歉。我正在尝试通过在线教程来学习SQL,这非常令人沮丧:(

6 个答案:

答案 0 :(得分:2)

如果ID为int,请使用此功能,也不要忘记用反引号包装user,因为它是保留的关键字:

SELECT * FROM `user` WHERE userid=0001;

或者这个:

SELECT * FROM `user` WHERE userid=1;

如您所述,您需要 EXACT ID记录。

答案 1 :(得分:2)

您正在混合整数与字符串比较。如果您的ID是INT,则将其比较为整数(因此省略尾随零。)

答案 2 :(得分:2)

这是因为您的自动增量类型为INT(NUMBER),并且您正在寻找字符串比较(在SQL varchar中)
您应该将列类型设置为VARCHAR并使用此语句

select * from user where userid like '0001'  

OR

select * from user where userid like '%0001%'

答案 3 :(得分:2)

如果用户ID是int,则这是预期的行为(00001 = 1)。

将ID设为varchar字段会有所帮助。然而,这听起来不是一个好主意。 为什么要允许000001旁边的001?它必然会引起问题,没有明显的优势(对我而言)。

要么具有自动递增ID(1 2 3 4 5 ....),要么在用户创建记录时生成完全随机的字符串。后者将使人们无法猜测其他用户的ID,这在某些情况下可能是一件好事。

答案 4 :(得分:1)

USE LIKE ::

SELECT * FROM user WHERE userid LIKE '0001'

答案 5 :(得分:1)

userID的数据类型为INT。当您在userID创建语句并具有条件时,mysql会将其隐式地转换为INT,这就是字符串0001等同于1的原因。

以下是您可能需要的建议,将userID的数据类型更改为VARCHAR字符串)并创建算法以增加userID当列为字符串时,0001不等于1