SQL Server 中字符类型包括varchar、char、text等。主要用于存储字符数据。varchar和char类型的主要区别在于数据填充。例如,一个列名为FirstName且数据类型为varchar(20)的表,同时将值Brian存储到列FirstName中,那么物理上只存储5个字节。但如果在数据类型为char(20)的列中存储相同的值,将使用全部的的20个字节。SQL将插入拖尾空格来填满20个字符。
注:有这么一个问题,如果要节省空间,那么为什么还要使用char数据类型呢?这是因为使用varchar数据类型会稍微增加一些系统开销。所以,如果要存储两个字母形式的缩写,最好使用char(2),尽管有些人认为应该最大限度的节省空间,但一般来说,好的做法是找到合适的阈值,指定低于该阈值的采用char类型数据,反之则采用varchar数据类型。比如,任何小于或等于5个字节的列都应该存储为char数据类型,而不是varchar类型。超过这个长度,使用varchar数据类型的好处将超过其额外开销。
nvarchar数据类型和nchar数据类型的工作方式于对等的varchar数据类型和char数据类型相同,但是这两种数据类型可以处理国际性的Unicode字符,他们需要一些额外的开销。以Unicode形式存储的数据为一个字符占用两个字节(这里指USC-2)。如果将值Brian存储到nvarchar列,将使用10个字节;而如果将之存储为nchar(20),就需要40个字节。
数据类型 | 描述 | 存储空间 |
char(n) | n为1~8000字符之间 | n字节 |
nchar(n) | n为1~4000 Unicode字符之间 | 2 × n 字节 |
nvarchar(max) | 最多为230 - 1 Unicode字符 | 2 × 字符数 + 2字节额外开销 |
text | 最多为231 - 1 字符 | 每字符1字节+2字节额外开销 |
varchar(n) | n为1 ~ 8000字符之间 | 每字符1字节 + 2字节额外开销 |
varchar(max) | 最多为231 - 1 字符 | 每字符1字节 + 2字节额外开销 |