带有额外字符问题的指南
Guid with extra characters issue
我有一个名为 Student
的 table,包含一个列 StudentId
作为 GUID
,所以我为此使用了 Uniqueidentifier
数据类型。
如果我想得到特定的记录,我通过下面的查询得到结果:
SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73'
它return是预期的结果。但是如果我在最后也错误地添加了任何额外的字符,它 return 是相同的结果。像下面的查询:
SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73xyz'
如果我在GUID
的末尾传递了额外的字符,为什么它不被认为是无效的GUID
?和 return 相同的结果?
GUID
是16个字节,所以从给定的919C3BF9-B081-458C-897D-C0B3FF56AF73
91
是第一个字节
9C
是第二个字节
3B
是第 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}'
如 documentation 所述:
The following example demonstrates the truncation of data when the value is too long for the data type being converted to. Because the uniqueidentifier type is limited to 36 characters, the characters that exceed that length are truncated.
DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;
Here is the result set.
String TruncatedValue
-------------------------------------------- ------------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0
(1 row(s) affected)
我有一个名为 Student
的 table,包含一个列 StudentId
作为 GUID
,所以我为此使用了 Uniqueidentifier
数据类型。
如果我想得到特定的记录,我通过下面的查询得到结果:
SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73'
它return是预期的结果。但是如果我在最后也错误地添加了任何额外的字符,它 return 是相同的结果。像下面的查询:
SELECT * FROM Student WHERE StudentId = '919C3BF9-B081-458C-897D-C0B3FF56AF73xyz'
如果我在GUID
的末尾传递了额外的字符,为什么它不被认为是无效的GUID
?和 return 相同的结果?
GUID
是16个字节,所以从给定的919C3BF9-B081-458C-897D-C0B3FF56AF73
91
是第一个字节
9C
是第二个字节
3B
是第 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}'
如 documentation 所述:
The following example demonstrates the truncation of data when the value is too long for the data type being converted to. Because the uniqueidentifier type is limited to 36 characters, the characters that exceed that length are truncated.
DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';
SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;
Here is the result set.
String TruncatedValue
-------------------------------------------- ------------------------------------
0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0
(1 row(s) affected)