char和varchar
固定长度或可变长度的字符数据类型。
char [ ( n ) ]
固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。
varchar [ ( n | max ) ]
可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符。
如果站点支持多语言,请考虑使用 Unicode nchar 或 nvarchar 数据类型,以最大限度地消除字符转换问题。如果使用 char 或 varchar,建议执行以下操作:
- 如果列数据项的大小一致,则使用 char。
- 如果列数据项的大小差异相当大,则使用 varchar。
- 如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。
nchar和nvarchar
字符数据类型(nchar 长度固定,nvarchar 长度可变)和 Unicode 数据使用 UNICODE UCS-2 字符集。
nchar [ ( n ) ]
n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。nchar 的 SQL-2003 同义词为 national char 和 national character。
nvarchar [ ( n | max ) ]
可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。
如果列数据项的大小可能相同,请使用 nchar。
如果列数据项的大小可能差异很大,请使用 nvarchar。
在 MicrosoftSQL Server 的未来版本中将删除 ntext、text 和 image 数据类型。请避免在新开发工作中使用这些数据类型,并考虑修改当前使用这些数据类型的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。
ntext=nvarchar(max)
text =varchar(max)
image =varbinary(max)
char类型在查询时比varchar更有效率
varchar储存数据时不会浪费空间
在sqlserver中默认是8K一页,0%的填充因子,
用char因为是定长,存储时已经分配了指定的长度如:^字符1_____^^字符2_______^....这样做会出现空格,存储空间的浪费,但改变一个记录的值时不会发生存储位置的变化,
而varchar是变长的,存储时按实际大小分配空间:^字符1^^字符11^....这样做不会出现空间的浪费,但你的值一旦被update为新的长度因为原来的地方容纳不下,sqlserver会将它放在页末,^字符11^........^字符111^而0%的填充因子,使本页也放不下,sqlserver就会放在最后一页的页末,在物理上顺序改变了,导致记录指针在移动时不会顺序移动,这样影响了索引速度,所以一般char当主键,varchar存储非关键信息!