假设我有一个包含以下列的数据库表:
蛋白质序列
id (Integer)
AASequence (nvarchar(max))
还假设此表只有一个条目
其中AASequence = 'PLEINEQMMDLHSSLRTWCYFCYNAALHVPGNLTTQLMAKAMEPNAINIHCSEPTDYQQQGRSAASEWGLGIWQIVNLCHMCLGLYACVKTGSFNGCDGGGFQGIWCCWGSFTDYSLDDALGEKWCKEMRPYAHQINDVLIDMPLEFQHDSSIQWPQKACDNNQSTMTFWLAEKIFTFFQGLKQMDSTFQDNCPHATQNQKAMQVRAGSRATEAYCINTSDFMCLSKKWMAACKTKIVDGFQFSQFCWSNMDWATVYICANLTNWFYTGATSSKLVDQVWRESIVGQMFTHLYCPNVCIVPEYCEEMCFNRSQAQCMSADMCSLRSKQCTTELFCYICAGFLGGNVAWNGQRWWETDMYIEYWLIWTLQWHCNKHMHGCSTESRMHEYDDQQILELKNIHVWPFPGYEEYYTECRPEEMTVMQHTASMGSEAHNDLKNAWILDGSDMIADIWEVNICESQPQWWVNEWGKYLCSHKHDGLIDE'
当我对它执行以下查询时:
SELECT TOP 1
AASequence,
LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', AASequence), 2)) AS noconvertvarcharmd5,
LOWER(CONVERT(VARCHAR(32), HashBytes('MD5', CONVERT(VARCHAR, UPPER(AASequence))), 2)) AS uppermd5,
FROM
[EOI].[dbo].[ProteinSequence]
WHERE
AASequence = 'PLEINEQMMDLHSSLRTWCYFCYNAALHVPGNLTTQLMAKAMEPNAINIHCSEPTDYQQQGRSAASEWGLGIWQIVNLCHMCLGLYACVKTGSFNGCDGGGFQGIWCCWGSFTDYSLDDALGEKWCKEMRPYAHQINDVLIDMPLEFQHDSSIQWPQKACDNNQSTMTFWLAEKIFTFFQGLKQMDSTFQDNCPHATQNQKAMQVRAGSRATEAYCINTSDFMCLSKKWMAACKTKIVDGFQFSQFCWSNMDWATVYICANLTNWFYTGATSSKLVDQVWRESIVGQMFTHLYCPNVCIVPEYCEEMCFNRSQAQCMSADMCSLRSKQCTTELFCYICAGFLGGNVAWNGQRWWETDMYIEYWLIWTLQWHCNKHMHGCSTESRMHEYDDQQILELKNIHVWPFPGYEEYYTECRPEEMTVMQHTASMGSEAHNDLKNAWILDGSDMIADIWEVNICESQPQWWVNEWGKYLCSHKHDGLIDE';
根据是否转换输入序列,我在SQL Server 2017中获得不同的哈希编码。这是结果
未转换:76efbe0427aa717507930168758c664d
转换后:85b592208da2d9a2415420009fe56ceb
我还发现这种差异在“ ATCG”之类的很短的字符串上也没有发生
有人可以帮助我了解为什么会这样吗?
上下文:此行为是在代码检查期间确定的,以查找为什么我们在数据库中重复条目的原因。注意:我们使用MD5校验和来确定一串字母的唯一性。
答案 0 :(得分:4)
CONVERT(varchar,upper(AASequence))
截短为30个字符,您需要明确提供类型长度,例如CONVERT(varchar(500),upper(AASequence))
参考文献:
Sqlfiddle:http://sqlfiddle.com/#!18/b4c4b/5
答案 1 :(得分:-2)
以下函数调用会产生不同的纯文本。
AASequence
CONVERT(varchar,upper(AASequence)))
不同的纯文本输入=不同的哈希值。
让AASequence =敏捷的棕色狐狸跳过了那只懒狗。
然后,上层(AASequence)=棕色的狐狸跃过懒惰的狗。