我需要更好地理解win application / asp.net应用程序中的用户文本输入,以及SQLServer中存储的数据的适当字段大小。
如果一切都是ASCII,看起来这很简单(每个字符1个字节),但我想我真的不明白当用户将文本放入输入字段时会发生什么。如果输入是在UniCode中,则每个字符(通常)有2个字节(?),如果我知道文本输入不能超过5个字符,那么SQL列应该是varchar(10)???我怎么知道输入应该是ANSI还是Unicode? p>
希望这是有道理的。就网页或获胜应用如何确定数据的编码方式而言,这是我从未完全理解的。
答案 0 :(得分:4)
创建列时,无论是否为Unicode,都指定需要存储的字符数。最多需要5个字符?然后它是VARCHAR(5)
或NVARCHAR(5)
,具体取决于您是否需要 Unicode - 这是业务讨论,而不是技术讨论。 2个字节与列定义无关 - 即 storage 大小。因此,如果完全填充,VARCHAR(5)
将占用5个字节,如果完全填充,则NVARCHAR(5)
将占用10个字节。定义列时,您不必担心这些实现细节;但是在做出选择之前你应该确定需要Unicode,因为无缘无故地将空间需求加倍是浪费。
(忽略关于这样一列是否应为CHAR/NCHAR
,空字节开销等的参数。)
答案 1 :(得分:2)
SQL列不是由字节大小设置的,而是由字符大小设置的。 varchar(10)
列将接受10个字符。如果您要接受Unicode输入,最好设置nvarchar(10)
这仍然需要10个字符,但它将允许所有Unicode输入到该列。 ntext text nchar char
也是如此。可以在http://technet.microsoft.com/en-us/library/ms187752.aspx找到理解SQL数据类型的良好MSDN页面。至于ASP.NET网站上的文本框中的内容,可以将任何内容输入到该文本框中,通过代码来强制执行您想要输入的内容的规则。