SQL 服务器数据类型来存储字符串并且占用更少 space

SQL Server data types to store strings and take less space

我有一个关于在 SQL 语言中可用的数据类型将数据存储到数据库本身的问题。由于我正在处理非常大的数据库,并且有扩展超过 150GB+ 数据的趋势,我需要密切注意并保存服务器硬盘上的每一位 space,以便数据库不会'占用了所有宝贵的space。所以我的问题如下:

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

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

  3. 是否有其他一些技术可以用来在数据库中保存 space 以使其不会快速扩展?

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

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

  1. 如果我有nvarchar(max)数据类型,在table中,输入的记录只占100个字符,为该类型保留多少数据记录?

  2. 假设我有以下形式的 ID 191697193441 ...将此数字存储为 varchar(200) 或 bigint 更有意义吗?

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 ) ] Variable-length, non-Unicode string data. n defines the string length and can be a value from 1 through 8,000. max indicates that the maximum storage size is 2^31-1 bytes (2 GB). The storage size is the actual length of the data entered + 2 bytes.

所以对于你的第 4 个问题,nvarchar 需要 100 * 2 + 2 = 202 字节,varchar 需要 100 * 1 + 2 = 102 字节。

There's no performance or data size difference as they're variable length data types, so they'll only use the space they need.

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

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