SQL中char\varchar\text与nchar\nvarchar\ntext的区别
定义特点定义
char
char(n)是长度不可变的,用于表示非Unicode字符数据。n代表该数据类型所允许保存的字符串的最大长度,它必须是一个介于1和8,000之间的数值,存储大小为 n个字符
varchar
varchar(n)是长度可变的,用于表示非Unicode字符数据。n代表该数据类型所允许保存的字符串的最大长度,它必须是一个介于1和8,000之间的数值,存储大小为输入字符的实际长度,而不是 n个字符。所输入的数据字符长度可以为零。
nvarchar
nvarchar(n)是长度可变的,用于表示Unicode字符数据。n代表该数据类型所允许保存的字符串的最大长度,它必须是一个介于1和4,000之间的数值,存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
特点
char
索引效率高当输入的字符长度小于指定的最大长度n时,保存的时候会使用trim去掉字符串末尾的空格,并在字符串末尾补空值;当输入的字符长度大于指定的最大长度n时,保存的时候会截去超出的字符适合保存MD5后的哈希值或经常改变的值,因为固定的行不容易产生碎片
varchar
比使用定长类型的char占用更少存储空间,但效率没char高使用额外的1-2字节来存储值长度(实际使用了多少长度),长度<=255使用1字节保存,其它情况使用2字节保存。例如varchar(10)会占用11字节存储空间,varchar(500)会占用502字节存储空间取值或设置值都会保存字符串末尾的空格最大长度远大于平均长度,很少发生更新的时候适合使用varchar,因为碎片更少了
text
text存储可变长度的非Unicode字符数据,最大长度为2^31-1(2,147,483,647)个字符
nchar\nvarchar\ntext
这三种从名字上看比前面三种多了个“n”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字则需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示,高位是补位的。nchar\nvarchar的长度是在1到4000之间,无论英文或汉字最多能存储4000个字符;而char\varchar最多能存储8000个英文,4000个汉字。因此在输入的字符为纯英文时使用char\varchar,可减少存储空间的浪费;而当含有中文汉字时应使用nchar\nvarchar。
如果觉得《SQL中char\varchar\text与nchar\nvarchar\ntext的区别》对你有帮助,请点赞、收藏,并留下你的观点哦!