0

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

但是,当我执行如下选择语句时:

SELECT * FROM user WHERE userid='0001'

上面的语句返回了用户 ID '1' 的信息。无论我在“1”前面放了多少“0”,我都会得到用户ID“1”的记录

我可以知道如何让它仅在它与确切的用户 ID 匹配时才返回结果(即,当我键入userid=1而不是返回用户 ID 为 1 的用户的记录时userid=00000001)

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

4

6 回答 6

2

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

SELECT * FROM `user` WHERE userid=0001;

或这个:

SELECT * FROM `user` WHERE userid=1;

正如您所提到的,您需要EXACT ID 记录。

于 2013-02-03T12:23:42.127 回答
2

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

于 2013-02-03T12:24:11.467 回答
2

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

select * from user where userid like '0001'  

或者

select * from user where userid like '%0001%'
于 2013-02-03T12:24:37.213 回答
2

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

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

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

于 2013-02-03T12:24:45.580 回答
1

使用LIKE::

SELECT * FROM user WHERE userid LIKE '0001'
于 2013-02-03T12:23:23.227 回答
1

该列的数据类型userIDINT. 当您创建一个语句并且条件为 on 时userID,mysql 会隐式地将其转换INT为字符串的原因0001等价于1.

这里有一个你可能想要的建议,改变userIDinto VARCHAR( string ) 的数据类型并创建一个算法来增加userID. 当列为字符串时,0001不等于1

于 2013-02-03T12:25:27.027 回答