C# 了解字符串大小/unicode/sqlServer列大小

C# 了解字符串大小/unicode/sqlServer列大小,c#,sql-server,unicode,C#,Sql Server,Unicode,我需要更好地理解win applications/asp.net应用程序中的用户文本输入,以及SQLServer中存储的数据的适当字段大小 如果所有内容都是ASCII,那么这看起来很简单(每个字符1个字节),但我想我真的不明白当用户将文本放入输入字段时会发生什么。如果输入是UniCode,那么(通常)每个字符有2个字节(?),如果我知道文本输入不能超过5个字符,那么SQL列应该是varchar(10)???我如何知道输入应该是ANSI还是Unicode 希望这是有道理的。就网页或win应用程序如

我需要更好地理解win applications/asp.net应用程序中的用户文本输入,以及SQLServer中存储的数据的适当字段大小

如果所有内容都是ASCII,那么这看起来很简单(每个字符1个字节),但我想我真的不明白当用户将文本放入输入字段时会发生什么。如果输入是UniCode,那么(通常)每个字符有2个字节(?),如果我知道文本输入不能超过5个字符,那么SQL列应该是varchar(10)???我如何知道输入应该是ANSI还是Unicode


希望这是有道理的。就网页或win应用程序如何确定数据的编码方式而言,我从未完全理解这一点

创建列时,可以指定需要存储的字符数,而不管它是否为Unicode。最多需要5个字符?然后是
VARCHAR(5)
NVARCHAR(5)
,这取决于您是否真正需要Unicode——这是一个业务讨论,而不是技术讨论。2个字节与列定义无关,这与存储大小有关。因此,
VARCHAR(5)
如果完全填充将需要5个字节,而
NVARCHAR(5)
如果完全填充将需要10个字节。在定义列时,您不必担心这些实现细节;但是,在做出选择之前,您应该确保需要Unicode,因为无缘无故地将空间需求增加一倍是浪费的


(忽略有关此类列是否应为
CHAR/NCHAR
、空字节开销等的参数)

创建列时,您可以指定需要存储的字符数,而不管它是否为Unicode。最多需要5个字符?然后是
VARCHAR(5)
NVARCHAR(5)
,这取决于您是否真正需要Unicode——这是一个业务讨论,而不是技术讨论。2个字节与列定义无关,这与存储大小有关。因此,
VARCHAR(5)
如果完全填充将需要5个字节,而
NVARCHAR(5)
如果完全填充将需要10个字节。在定义列时,您不必担心这些实现细节;但是,在做出选择之前,您应该确保需要Unicode,因为无缘无故地将空间需求增加一倍是浪费的


(忽略有关此类列是否应为
CHAR/NCHAR
、空字节开销等的参数)

SQL列不是由字节大小设置的,而是由字符大小设置的。
varchar(10)
列将接受10个字符。如果您要使用Unicode输入,最好设置
nvarchar(10)
这仍然需要10个字符,但它将允许所有Unicode输入到该列。这同样适用于
ntext text-nchar-char
。有关了解SQL数据类型的良好MSDN页面,请访问。至于ASP.NET站点上的文本框中输入的内容,任何内容都可以输入到该文本框中,这取决于您通过代码来强制执行所需输入内容的规则。

SQL列不是由字节大小设置的,而是由字符大小设置的。
varchar(10)
列将接受10个字符。如果您要使用Unicode输入,最好设置
nvarchar(10)
这仍然需要10个字符,但它将允许所有Unicode输入到该列。这同样适用于
ntext text-nchar-char
。有关了解SQL数据类型的良好MSDN页面,请访问。至于ASP.NET站点上的文本框中要输入的内容,任何内容都可以输入到该文本框中,这取决于您通过代码强制执行要输入内容的规则。

因此,您指定的是字符长度,而不是列的存储大小(以字节为单位)。我想这就是我出错的部分原因。@rune711没错,您指定的是您需要的内容,而不是它将占用多少空间。因此,您指定的是字符长度,而不是列的存储大小(以字节为单位)。我想这就是我出错的部分原因。@rune711是的,您可以指定您需要什么,而不是需要多少空间。谢谢大家的输入。我也找到了覆盖它的地方。谢谢大家的意见。我还找到了一个覆盖它的地方。