Guid有额外的角色问题

Mut*_*san 5 sql sql-server guid uniqueidentifier

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

如果我想获得特定记录,我会通过以下查询得到结果:

SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73'
Run Code Online (Sandbox Code Playgroud)

它返回预期的结果.但是如果我错误地在最后添加任何额外的字符,它会返回相同的结果.如下面的查询:

SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73xyz'
Run Code Online (Sandbox Code Playgroud)

如果我在最后传递额外的字符GUID,为什么不认为它是无效的GUID?并返回相同的结果?

Aru*_*mar 2

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

91是第 1 个字节
9C是第
3B2 个字节 是第 3 个字节
F9是第 4 个字节
..
..
..
..
56是第 14 个字节
AF是第 15 个字节
73是第 16 个字节

的解析919C3BF9-B081-458C-897D-C0B3FF56AF73xyz在 之前完成xyz

所以第16个字节之后输入的字符将不予考虑。

但如果您在前面添加任何额外的字符,它将不会被视为有效GUID

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

SELECT * FROM Student 
WHERE StudentId = '{919C3BF9-B081-458C-897D-C0B3FF56AF73}'
Run Code Online (Sandbox Code Playgroud)