sqlserver int转字符串_sql server节俭的艺术

cb8000f9b9f97d7a1d513963401ceb05.png

显式和隐式数据类型转换

当数据库记录数较大的时候,我们必须考虑字段类型是否合适,它对数据库读写性能、存储空间有较大影响。

例如,对于一个人的年龄,tinyint 就足够了,因为没人活到 255 岁以上,所以没必要用int,后者会占用更大的存储空间,并对读写产生影响。

以下是我对sql server数据类型的总结,包括数据类型范围、存储,最后也对NULL值是否会占存储空间做一些说明。

精确数字

bigint

-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)8 字节

int

-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)4 个字节

smallint

-2^15 (-32,768) 到 2^15-1 (32,767)2 字节

tinyint

0 到 2551 字节

decimal 和 numeric

精度存储字节数1 - 9 510-19920-281329-3817

money

-922,337,203,685,477.5808 到 922,337,203,685,477.58078 字节

smallmoney

-214,748.3648 到 214,748.36474 个字节

近似数字

float

-1.79E + 308 至 -2.23E - 308、0 以及 2.23E - 308 至 1.79E + 308取决于 n 的值n 值精度存储大小1-247 位数4 个字节25-5315 位数8 字节

real

-3.40E + 38 至 -1.18E - 38、0 以及 1.18E - 38 至 3.40E + 384 个字节

日期和时间

date 固定 3 个字节

datetime 8 字节

smalldatetime 固定 4 个字节。

time

固定 5 个字节,是使用默认的 100ns 秒的小数部分精度时的默认存储大小。 在 Informatica 中,默认为 4 个字节,固定不变,同时秒的小数部分精度默认为 1 毫秒。

datetime2

精度小于 3 的 6 个字节。精度为 3 和 4 的 6 个字节。所有其他精度则需要 8 个字节。1

datetimeoffset

指定的小数位数结果 (精度, 小数位数)列长度(以字节为单位)秒的小数部分精度datetimeoffset(34,7)107datetimeoffset(0)(26,0)80-2datetimeoffset(1)(28,1)80-2datetimeoffset(2)(29,2)80-2datetimeoffset(3)(30,3)93-4datetimeoffset(4)(31,4)93-4datetimeoffset(5)(32,5)105-7datetimeoffset(6)(33,6)105-7datetimeoffset(7)(34,7)105-7

字符串

char [ ( n ) ]

固定长度,非 Unicode 字符串数据。 n 用于定义字符串长度,并且它必须为 1 到 8,000 之间的值。 存储大小为 n 字节。 char 的 ISO 同义词为 character。

varchar [ ( n | max ) ]

可变长度,非 Unicode 字符串数据。 n 用于定义字符串长度,并且它可以为 1 到 8,000 之间的值。 max 指示最大存储大小是 2^31-1 个字节 (2 GB)。 存储大小为所输入数据的实际长度 + 2 个字节。 varchar 的 ISO 同义词为 char varying 或 character varying。

text

服务器代码页中长度可变的非 Unicode 数据,字符串最大长度为 2^31-1 (2,147,483,647) 个字节。 当服务器代码页使用双字节字符时,存储仍是 2,147,483,647 字节。 根据字符串,存储大小可能小于 2,147,483,647 字节。

Unicode 字符串

nchar [ ( n ) ]

固定长度字符串数据。 n 用于定义字符串长度(以双字节为单位),并且它必须为 1 到 4,000 之间的值。 存储大小为 n 字节的两倍。 对于 UCS-2 编码,存储大小为 n 个字节的两倍,并且可存储的字符数也为 n。 对于 UTF-16 编码,存储大小仍为 n 个字节的两倍,但可存储的字符数可能小于 n,因为补充字符使用两个双字节(也称为代理项对)。 nchar 的 ISO 同义词是 national char 和 national character。

nvarchar [ ( n | max ) ]

可变长度字符串数据。 n 用于定义字符串长度(以双字节为单位),并且它可以是 1 到 4,000 之间的值。 max 指示最大存储大小是 2^30-1 个字符 (2 GB)。 存储大小为 n 字节的两倍 + 2 个字节。 对于 UCS-2 编码,存储大小为 n 个字节的两倍 + 2 个字节,并且可存储的字符数也为 n。 对于 UTF-16 编码,存储大小仍为 n 个字节的两倍 + 2 个字节,但可存储的字符数可能小于 n,因为补充字符使用两个双字节(也称为代理项对)。 nvarchar 的 ISO 同义词是 national char varying 和 national character varying。

ntext

长度可变的 Unicode 数据,字符串最大长度为 2^30 - 1 (1,073,741,823) 个字节。 存储大小是所输入字符串长度的两倍(以字节为单位)。 ntext 的 ISO 同义词为 national text。

二进制字符串

binary [ ( n ) ]

长度为 n 字节的固定长度二进制数据,其中 n 是从 1 到 8,000 的值。 存储大小为 n 字节。

varbinary [ ( n | max) ]

可变长度二进制数据。 n 的取值范围为 1 至 8,000。 max 指示最大存储大小是 2^31-1 个字节。 存储大小为所输入数据的实际长度 + 2 个字节。 所输入数据的长度可以是 0 字节。 varbinary 的 ANSI SQL 同义词为 binary varying。

图像

长度可变的二进制数据,从 0 到 2^31-1 (2,147,483,647) 个字节。

NULL值是否占用存储空间

在SQL SERVER中,定长记录的NULL值占用存储空间,而变长记录的NULL值不占用存储空间。

  • 例如:

对于varchar数据类型,无论是空字符串还是NULL值都不占用任何空间

对于char数据类型,无论是空字符串还是NULL值都占用空间,所占用空间大小取决于建表时候指定的char数据类型的大小

参考一下链接验证上述结论

https://blog.csdn.net/h2503652646/article/details/84991240


版权声明:本文为weixin_30783205原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。