Sql server 在HashByte md5函数中使用varchar(8000)列值

Sql server 在HashByte md5函数中使用varchar(8000)列值,sql-server,Sql Server,我想使用SQL中的所有行值创建一个哈希。在该表中,一个列的长度是varchar(8000)- Hashbyte('MD5',column1+column2+....) -- column1 having varchar(8000) length and it contains string of length 8000. 然后它给我相同的hashbyte,其中column1中的行具有相同的值,即使其他列包含不同的数据 然后我在hashbyte函数中将column1转换为varchar(max)

我想使用SQL中的所有行值创建一个哈希。在该表中,一个列的长度是varchar(8000)-

Hashbyte('MD5',column1+column2+....) -- column1 having varchar(8000) length and it contains string of length 8000.
然后它给我相同的hashbyte,其中column1中的行具有相同的值,即使其他列包含不同的数据

然后我在hashbyte函数中将column1转换为varchar(max),每行得到不同的hashbyte

Hashbyte('MD5',convert(varchar(max),column1)+column2+....)
为什么hashbyte('MD5'…)不接受所有列值

如果您想再尝试一个varchar(8000)列问题的示例- 试着计算长度

创建一个具有varchar(8000)列的表,并计算所有列值的长度。它只会给你8000英镑。接下来,将varchar(8000)转换为varchar(max),它将给出正确的结果

len(column1+column2...) --> 8000
len(convert(varchar(max),column1)+column2...) --> actual length

使用varchar(8000)添加任何字符串都是这样一个问题?

您错误地认为
varchar(8000)
连接到
varchar(8000)
(甚至任何其他长度)