数据库字段的类型说明
最近和人聊起来数据库存储字段的类型区别时候发现有些字段自己也不是很清楚,回来查阅了一些资料后才对这些字段的类型有了明确的定义。
数据库字段的常见类型一般包括:
int bit char varchar nchar nvarchar decimal numeric float datetime smalldatetime当然还有一些不常用到的字段类型
int 是最常见的存储的存储类型,它存储的是从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据
bit:1或0的整数数据。一般存储bool类型的数据
char和varchar的长度都定义在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。定长字符数据就是不管实际占用的空间是多少总是为这个字段分配这个长度的空间,不足部分默认补充英文空格,而变长字符数据则不会填充。
nchar和nvarchar则表示它表示存储的是Unicode数据类型的字符。也就是说他们的长度是在1到4000之间, 所谓的Unicode数据类型就是为了解决中文字符和英文字符集这种不兼容的问题而产生的。它所对应的英文字符改为和中文字符一样用两个字节来对应,这样做的结果就是避免了中英文存储过程中容易造成的混淆,但却是以牺牲了空间为带价的。至于他们两个的区别参照上面的解释
(4)decimal和numeric
decimal和numeric 这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p之间的值,默认小数位数是0。
float:从-1.79^308到1.79^308之间的浮点数字数据
datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。
smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。
---------------------------------------------------------华丽的分割线---------------------------------------------------------------------
去面试问到这个问题,本来觉得自己理解的很透彻了,结果面试官一句话把我问蔫了, 问为什么这么存储,现在想起来自己一直是知其然而不知其所以然,现在回过头想想,使用不同类型的数据类型是综合了时间和空间的考虑,char(10)类型存储定长的数据,所以索引效率极高,无论是否达到10个字符,都会去占去10个字节的空间,不足的空间 存储空值 ,而varchar 所占的空间 是实际长度+1 这里的+1是用来存储实际用了多少的长度,如果频繁的修改会不断的分配新的存储空间,这会 使用Varchar容易产生碎片化的问题
nchar和nvarchar是因为中英文字符的编码方式不同,所占的字节数也不同,Unicode字符集就是为了解决这种字符集产生的不兼容的问题产生的,它的所有的字符都用两个字节表示