我有一个名为表Student,包含一列StudentId的GUID,所以我使用的Uniqueidentifier数据类型为。
Student
StudentId
GUID
Uniqueidentifier
如果要获取特定记录,可以通过以下查询获取结果:
SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73'
它返回预期的结果。但是,如果我错误地在末尾添加了任何额外的字符,它也会返回相同的结果。像下面的查询:
SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73xyz'
如果我在末尾传递了多余的字符GUID,为什么不认为它无效GUID?并返回相同的结果?
GUID 是16个字节,所以从给定 919C3BF9-B081-458C-897D-C0B3FF56AF73
919C3BF9-B081-458C-897D-C0B3FF56AF73
91是第一个字节 9C的第2个字节 3B的第3个字节 F9的4个字节 .. .. .. .. 56是14字节 AF的15个字节 73是第16个字节
91
9C
3B
F9
56
AF
73
解析919C3BF9-B081-458C-897D-C0B3FF56AF73xyz在xyz。之前完成。
919C3BF9-B081-458C-897D-C0B3FF56AF73xyz
xyz
因此,将不考虑字符在第16个字节之后输入。
但是,如果您在前面添加任何多余的字符,则不会将其视为有效GUID。
此外,当您GUID使用查询时,请使用之间的代码{}。
{}
SELECT * FROM Student WHERE StudentId = '{919C3BF9-B081-458C-897D-C0B3FF56AF73}'