我有一个用户表,其中包含一个自动增量用户标识字段,我想将其用作登录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,这非常令人沮丧:(
答案 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
。