一尘不染

引导带有额外字符的问题

sql

我有一个名为表Student,包含一列StudentIdGUID,所以我使用的Uniqueidentifier数据类型为。

如果要获取特定记录,可以通过以下查询获取结果:

SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73'

它返回预期的结果。但是,如果我错误地在末尾添加了任何额外的字符,它也会返回相同的结果。像下面的查询:

SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73xyz'

如果我在末尾传递了多余的字符GUID,为什么不认为它无效GUID?并返回相同的结果?


阅读 114

收藏
2021-05-23

共1个答案

一尘不染

GUID 是16个字节,所以从给定 919C3BF9-B081-458C-897D-C0B3FF56AF73

91是第一个字节
9C的第2个字节
3B的第3个字节
F9的4个字节
..
..
..
..
56是14字节
AF的15个字节
73是第16个字节

解析919C3BF9-B081-458C-897D-C0B3FF56AF73xyzxyz。之前完成。

因此,将不考虑字符在第16个字节之后输入。

但是,如果您在前面添加任何多余的字符,则不会将其视为有效GUID

此外,当您GUID使用查询时,请使用之间的代码{}

SELECT * FROM Student 
WHERE StudentId = '{919C3BF9-B081-458C-897D-C0B3FF56AF73}'
2021-05-23