加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码门户网 (https://www.92codes.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 具有额外字符的唯一标识符仍然在Select中匹配

发布时间:2021-01-11 17:01:39 所属栏目:MsSql教程 来源:网络整理
导读:我们正在使用带有唯一标识符的SQL Server 2012,我们注意到在选择时添加了额外的字符(因此不是36个字符),它仍会返回与UUID的匹配. 例如: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8' 使用uuid 7DA26ECB-D599-4469-91D4

我们正在使用带有唯一标识符的SQL Server 2012,我们注意到在选择时添加了额外的字符(因此不是36个字符),它仍会返回与UUID的匹配.

例如:

select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8'

使用uuid 7DA26ECB-D599-4469-91D4-F9136EC0B4E8返回行.

但如果你跑:

select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS'

它还返回带有uuid 7DA26ECB-D599-4469-91D4-F9136EC0B4E8的行.

在执行选择时,SQL Server似乎忽略了36以外的所有字符.这是一个错误/功能还是可以配置的东西?

这不是一个大问题,因为我们在前端验证了长度,但对我来说这似乎不正确.

解决方法

如果值包含在大括号{…}中,则隐式转换也有效.

如果在查询中添加那些隐式转换,如果原始值太长,则隐式转换将失败,因为最后一个}在错误的位置结束.

select * 
from some_table 
where uuid = '{'+'7DA26ECB-D599-4469-91D4-F9136EC0B4E8'+'}'

如果你尝试转换

SELECT CONVERT(UNIQUEIDENTIFIER,'{'+'7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS'+'}');

你得到

Msg 8169,Level 16,State 2,Line 1
Conversion failed when converting from a character string to uniqueidentifier.

(编辑:源码门户网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读