sqlserver 中guid 类型表字段查询导致的问题

现象:
1 sqlserver 有表a, 有id 和parentid两个字段。 id为uniqueidentifier 类型,即guid类型。默认值为newsequentialid() 。 parentid为字符串类型。

2 a表数据为 id值为6c75c497-76e8-eb11-9d5d-6045cba80309 。parentid值6c75c497-76e8-eb11-9d5d-6045cba803097 (parentid的值比id的值多了一个7)

3 注意guid的值 执行语句 select * from a where id='6c75c497-76e8-eb11-9d5d-6045cba80309ppppppppppppp7' 可以查询出记录
执行 select * from a where parentid='6c75c497-76e8-eb11-9d5d-6045cba803097' 可以查询出记录
执行 select * from a where parentid='6c75c497-76e8-eb11-9d5d-6045cba80309' 可以查询出记录

4 可以看出来sqlserver执行查询的时候,对于guid类型的字段,会自动截取固定长度,然后再查询。比如你的guid的字符串输错了,变成37位,只要你前32位正确,依然可以查出结果。
字符串类型的字段,就不会如此,会按完全匹配来查询。

查看 数据使用的端口号
exec sys.sp_readerrorlog 0, 1, 'listening'

posted @ 2021-07-21 11:53  过错  阅读(295)  评论(0编辑  收藏  举报