问题1:8000个字符如何发挥作用,我应该从哪里知道呢?
将n设置为8000将使8000个字符起作用。您需要了解有关char,nchar,nvarchar和varchar 的Precision,Scale和Length(Transact-SQL)参考。相反,将n设置为max(不带引号)将导致SQL Server存储(并返回)最大字节数(如引号中所述)。
问题2:.net数据读取器对此列的查询是否总是返回包含100000+个字符的完整结果?
这是一个.Net(不是SQL Server)问题,但是.Net数据读取器获取字节流。字节不是字符,SQL Server返回字节(不是字符)。如果n设置为8000并且数据类型为nvarchar,则SQL Server返回最多8000个字节,.Net数据读取器可以将其解释为4000个Unicode字符。如果n设置为8000,并且数据类型为varchar,则SQL Server返回最多8000个字节,.Net数据读取器可以将其解释为最多8000个ANSI字符。如果将n设置为max并且数据类型为nvarchar,则SQL Server返回最多2 ^ 31-1个字节,.Net数据读取器最多可以将其解释为(2 ^ 31-1)/ 2个字符。如果n设置为max并且数据类型为varchar,则SQL Server返回最多2 ^ 31-1个字节,.Net数据读取器可以将其解释为最多2 ^ 31-1个ANSI字符。
如果您选择使用char或varchar(而不是nchar或nvarchar),因为它们可以存储更多的“字符”(更准确地说:字节),则需要注意很多Unicode字符没有等效的ANSI字符(因此,我们的很大一部分世界的用户将无法在您的应用中看到他们的本地化/本地字符)。
varchar(max)
名称曾经被调用过text
,被视为其他数据类型。