SQL 服务器数据类型来存储字符串并且占用更少 space
SQL Server data types to store strings and take less space
我有一个关于在 SQL 语言中可用的数据类型将数据存储到数据库本身的问题。由于我正在处理非常大的数据库,并且有扩展超过 150GB+ 数据的趋势,我需要密切注意并保存服务器硬盘上的每一位 space,以便数据库不会'占用了所有宝贵的space。所以我的问题如下:
哪种数据类型最适合在数据库中存储80-200个字符长的字符串?
我知道 varchar(200)
和 nvarchar(200)
其中 nvarchar
支持 unicode 字符。其中哪一个在数据库中占用的 space 较少,或者是否存在我不知道的第三种数据类型,并且我可以使用它来存储数据(如果我知道字符串我会存储只是数字和字母的组合,没有任何特殊字符)
是否有其他一些技术可以用来在数据库中保存 space 以使其不会快速扩展?
有人可以帮我解决这个问题吗?
P.S。伙计们,我还有第四个问题:
如果我有nvarchar(max)
数据类型,在table中,输入的记录只占100个字符,为该类型保留多少数据记录?
假设我有以下形式的 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 个字符是一个合理的最大大小,并且你有更多的错误机会(滥用该字段,不正确的数据捕获等)抛出错误,而不是向数据库添加废话并且需要未来的数据清理。
因此,我的一般经验法则是让它们与业务需求一样大,但不要更大。如果需求发生变化,将来将可变数据大小修改为更大的长度是微不足道的。
我有一个关于在 SQL 语言中可用的数据类型将数据存储到数据库本身的问题。由于我正在处理非常大的数据库,并且有扩展超过 150GB+ 数据的趋势,我需要密切注意并保存服务器硬盘上的每一位 space,以便数据库不会'占用了所有宝贵的space。所以我的问题如下:
哪种数据类型最适合在数据库中存储80-200个字符长的字符串?
我知道
varchar(200)
和nvarchar(200)
其中nvarchar
支持 unicode 字符。其中哪一个在数据库中占用的 space 较少,或者是否存在我不知道的第三种数据类型,并且我可以使用它来存储数据(如果我知道字符串我会存储只是数字和字母的组合,没有任何特殊字符)是否有其他一些技术可以用来在数据库中保存 space 以使其不会快速扩展?
有人可以帮我解决这个问题吗?
P.S。伙计们,我还有第四个问题:
如果我有
nvarchar(max)
数据类型,在table中,输入的记录只占100个字符,为该类型保留多少数据记录?假设我有以下形式的 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 个字符是一个合理的最大大小,并且你有更多的错误机会(滥用该字段,不正确的数据捕获等)抛出错误,而不是向数据库添加废话并且需要未来的数据清理。
因此,我的一般经验法则是让它们与业务需求一样大,但不要更大。如果需求发生变化,将来将可变数据大小修改为更大的长度是微不足道的。