2013-10-24 67 views
0

我需要更好地理解用户文本输入赢得应用程序/ asp.net应用程序,以及适当的字段大小应该为存储在SQLServer中的数据。了解字符串大小/ unicode/sqlServer列大小

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

希望这是有道理的。这是我从来没有完全理解的一个网页或一个胜利的应用程序如何确定如何编码数据。

+0

感谢您输入的每个人。我也找到[这篇文章](http://stackoverflow.com/questions/144283/what-is-the-difference-between-varchar-and-nvarchar),它涵盖了它非常好。 – rune711

回答

4

当您创建列时,您指定需要存储的字符数,而不管它是否是Unicode。最多需要5个字符?那么它要么是VARCHAR(5)要么是NVARCHAR(5),这取决于你是否真的需要 Unicode - 这是一个商业讨论,而不是技术讨论。这2个字节与列定义无关 - 大约是存储的大小。所以如果完全填充,VARCHAR(5)将占用5个字节,并且如果完全填充,NVARCHAR(5)将占用10个字节。定义列时,您不必担心这些实现细节;然而,在做出选择之前,你应该确定需要Unicode,因为没有理由地将空间需求翻倍是浪费的。

(忽略这样一个列是否应该CHAR/NCHAR,空字节开销等参数)

+0

因此您指定字符长度,而不是列的存储大小(以字节为单位)。我想这在一定程度上是我运行错误的地方。 – rune711

+0

@ rune711没错,你指定你需要什么,而不是占用多少空间。 –

2

SQL列不是由字节大小,但字符大小设置。一列varchar(10)将接受10个字符。如果你要采用Unicode输入,最好设置nvarchar(10)这仍然需要10个字符,但它将允许所有Unicode输入到该列。 ntext text nchar char也是如此。了解SQL数据类型的好的MSDN页面可以在http://technet.microsoft.com/en-us/library/ms187752.aspx找到。至于什么是进入您的ASP.NET网站的文本框中,任何东西都可以输入到该文本框中,这取决于您通过代码来执行您想要输入的规则。