char varchar nchar nvarchar 的区别

比较:
在这里插入图片描述note:
1.带有var前缀的,意思就是variable,长度可变。
2.长度定长一般存取速度快,但是空间利用率低。变长与之相反。
3.前缀带n的意思就是Unicode ,也就是所有字符都占两字节。对于没有Unicode的字符,一汉字==2英文。
在这里插入图片描述【1】定义一个char[10]和一个varchar[10],存进去的是‘csdn’

char 的长度是不可变的,那么 char 所占的长度依然为10,除了字符 ‘csdn’ 外,后面跟六个空格,去空格用Trim 。
varchar 的长度是可变的,那么 varchar 所占的长度为4,就是 ‘csdn’,后面无空格。

.因为长度固定, char的存取数度还是要比varchar要快得多,方便程序的存储与查找;但是char 多余的空格占位符付出的是空间的代价,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

char 的长度是不可变的,那么 char 所占的长度依然为10,除了字符 ‘csdn’ 外,后面跟六个空格,去空格用Trim 。
varchar 的长度是可变的,那么 varchar 所占的长度为4,就是 ‘csdn’,后面无空格。

实例理解
【1】char(n) 和 varchar(n),n 为字节数

char(n)
char(4):4 是代表字节数,一个汉字代表一个字符,2个字节;一个英文代表一个字符,一个字节。现在我们假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,所以用两个空格补上后面的两个字节,所以数据库的数据为‘ab ’)

varchar(n)
varchar(4):假如存储‘abcd’(4个字节,所以可以存储),再假如存储‘中国你好’(8个字节,所以不能存储),再假如存储‘ab’(由于是有四个字节,而现在ab只占两个字节,然而varchar(n)是由var开头的,数据是可变的,所以不用像char(4),用空格补字节的方法,而是可以直接省略空格,所以数据库的数据还是‘ab’)
【2】nchar(n)和nvarchar(n)

我们先弄清楚以n开头的数据类型是什么意思,已n开头表示此字符是unicode编码的格式,不是以n开头的自然不是unicode编码格式。我们在前面说过,括号里面的n是代表字节数,而在这里,由于是unicode编码格式,所以n代表2n个字节数,同样以上面的例子举例

nchar(n)
nchar(4),既然是unicode编码格式并且不是可变的,所以总共可以存储2*4=8个字节,我们现在假如存储‘abcd’(由于是只占四个字节,所以在数据库中的数据为‘abcd ’),假如存储‘中国你好’(则完全可以存放)
nvarchar(n)
既然是unicode编码且为可变的,所以存储‘abcd’(在数据库中的数据为‘abcd’,不会再补空格)

转载自:CSDN博主「景月娇-Kathy」的原创文章
原文链接:https://blog.csdn.net/luckystar_99/article/details/79604251

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值