SQL Server数据类型存储字符串并占用更少的空间

时间:2018-02-13 14:08:34

标签: sql-server database string varchar nvarchar

我对SQL语言中可用于将数据存储到数据库本身的数据类型有疑问。由于我正在处理相当大的数据库,并且有扩展超过150GB +数据的趋势,我需要密切关注并节省服务器硬盘上的每一点空间,以便数据库不会占用所有宝贵的空间。所以我的问题如下:

  1. 哪种数据类型最适合在数据库中存储80-200个字符的长字符串?

  2. 我知道例如varchar(200)nvarchar(200) nvarchar支持unicode字符。其中哪一个会占用数据库中较少的空间,或者是否存在我不知道的第三种数据类型,以及我可以用来存储数据(如果我知道我将存储的字符串的事实是只是数字和字母的组合,没有任何特殊字符)

  3. 我是否可以使用其他一些技术来节省数据库中的空间,以免它迅速扩展?

  4. 有人可以帮我解决这个问题吗?

    P.S。伙计们,我还有第四个问题:

    1. 例如,如果表格中有nvarchar(max)数据类型,输入的记录只占用100个字符,那么为这种记录保留了多少数据?

      < / LI>
    2. 假设我有ID,其格式如下:191697193441 ...将此号码存储为varchar(200)或bigint会更有意义吗?

2 个答案:

答案 0 :(得分:1)

nvarchar所需的大小是每个字符2个字节,因为它代表unicode数据。 varchar每个字符需要1个字节。存储大小是输入的实际字符数+ 2字节开销。对于varchar(max)也是如此。

来自https://docs.microsoft.com/en-us/sql/t-sql/data-types/char-and-varchar-transact-sql

  

varchar [(n | max)]可变长度的非Unicode字符串数据。 n定义字符串长度,可以是1到8,000之间的值。 max表示最大存储大小为2 ^ 31-1个字节(2 GB)。存储大小是输入数据的实际长度+ 2个字节。

因此,对于第4个问题,nvarchar需要100 * 2 + 2 = 202个字节,varchar需要100 * 1 + 2 = 102个字节。

答案 1 :(得分:1)

  

由于他们的可变长度数据类型没有性能或数据大小差异,因此他们只会使用他们需要的空间。

将size参数视为更有用的约束。对于例如如果你有一个姓氏字段,你可以合理地预期50个字符是一个合理的最大大小,你有更多的机会出错(滥用字段,不正确的数据捕获等)抛出错误,而不是向数据库添加废话并需要将来的数据清理。

所以,我的一般经验法则是让它们与业务需求一样大,但不会更大。如果需求发生变化,将来可变数据大小修改为更大的长度是微不足道的。