基本数据类型的区别
东西学了总是会忘,记在这里留着以后自己找方便。----------学东西要注意细节
昨天突然被提一个问题,平时大意的我肯定是没有在意的,瞬间爆炸。就想着把它记录下来,提醒自己。
sql server中char和varchar除了char是固定字长,varchar是不定长的区别外,到底还有什么区别呢?我该什么时间用哪个呢?是不是感觉varchar是多么的完美,要多长给多长,那char有什么存在的意义呢?Oh!My God。。。当时一脸懵逼。
仔细想想,其实并没有自己想象的复杂。。。。
char是给定了长度的,而varchar是没有给定具体的长度,当进行动态操作时,cpu是不是还要耗费时间去确定varchar到底有多长呢?在这里明显就有varchar的效率一般不如char。因为char是无论给多少数据,对它进行的操作总是n的长度。
现在,我就想到了,事情总有个特例吧。char的空间一定比varchar大吗?速度一定比vachar快吗?不是得。经过我反复的查询,果然如此。
1、比如varchar(3)和char(3),就算当存储的数据为NULL时,char占用字节也只有3个,而varchar占用的字节为4个。因为varchar的长度0占用4个字节
2、数据长度变化不大的用varchar也是浪费空间,它始终要算上varchar长度所占的位置
3、对于频繁更新的表char的速度比varchar的速度慢。
那么现在问题又来了,你觉得char、varchar、nchar和nvarchar有什么区别呢
其实就是Unicode和非Unicode的区别
nchar和nvarchar表示Unicode字符串型,char和varchar只是普通的字符串。而在Unicode中,无论是英文还是中文统一用16位表示,非Unicode中,英文用8位表示,中文用16位标识。显然Unicode字符比非Unicode字符范围广。但是存在一个问题。Unicode的编码速度比非Unicode的编码速度低。所以当全是英文的时候建议用非Unicode,当含有非英文时用Unicode。
其实ntext和text的区别就在此。要说他们和同一类型的其他数据类型的区别就在于它不用限制长度。个人觉得当要大量字符串时使用。
说到这儿,我们可以看一看整数型和浮点型的区别
整数型 | 数值型 | ||
类型 | 占位数 | 类型 | 占位数 |
bigint | 8 | numeric | 与精度有关 |
smallint | 4 | ||
int | 2 | decimal | 与精度有关 |
tinyint | 1 | float | 与位数有关 |
bit | real | 与位数有关 |
至于datetime和smalldatetime就像java里面的decimal和float数据类型之间的区别,datetime是8字节存储长度,可以精确到毫秒,只能精确到0.333秒,而smalldatetime是4字节长度,只可以精确到分钟,想一想它是small,也只能这样了。money和smallmoney与此类似。
至此,差不多明白了到底该用哪一个,如果有错,谢谢指出。
致学习的自己