四、列的字节与存储范围
详解列类型
数值型:
整型
tinyint
smallint
mediumint
int
bigint
以tinyint为例:
默认是有符号的,存储-128—>127
可选属性
Tinyint(M) unsigned zerofill
Unsigned:是无符号,影响存储范围,0-à255
M:代表宽度,(在zerofill时才有意义,其他时候没有意义)
Zerofill:零填充(如果某列是zerofill,那么它默认就是unsigned属性)0001,0002
列可以声明默认值,而且推荐声明默认值
Not null default 0
小数型:浮点型,定点型
Float(M,D):M代表总位数,D代表小数位(6,2)为例:-9999.99---à9999.99
Decimal(M,D):M,D的意义同上
区别:decimal比float精度更高,适合存储货币等要求精确的数字。
字符型:
Char:定长, char(M),M代表宽度,即:可容纳的字符数,0<=M<=255之间
Varchar:变长,varchar(M),M代表宽度,即:可容纳的字符数0<=M<=65535(以ascii字符为例,utf822000左右)
区别在哪儿呢?
定长:M个字符,如果存的小于M个字符,实占M个字符;
变长:M个字符,如果存的小于M个字符,设为N,N<=M,实占N个字符;
总结:1.宽度不同
2.实占空间不同
3.对空格的处理不同
速度上:定长速度快些
选择原则:
1. 空间利用效率,四字成语表,char(4),
个人简介,微博 最大140个字,varchar(140)
2. 速度
微博注册用户名:char
Text:略,不太用
日期时间类型:
Date 日期
Time 时间
Datetime 日期时间类型
Year 年类型
Year类型:1个字节 表示1905-2155年,【0000,表示错误时选择】
如果输入2位,“00-69”表示2000-2069;“70-99”表示1970-1999
如果记的麻烦,输入的时候,输4位就行了。
Date类型:典型格式 1992-08-12
日期类型:‘1000-01-01’----à‘9999-12-31’
Time类型:典型格式 hh:mm:ss
时间类型:‘-838:59:59’-----à‘838:59:59’
Datetime类型:典型格式:’1989-05-06 14:32:08’
日期时间类型:范围:1000-01-01 00:00:00 ---à9999-12-31 23:59:59
注意:
在开发中,很少用日期时间类型来表示一个需要的精确到秒的列。
原因:虽然日期时间类型能精确到秒,而且方便查看,但是..........
所以通常是用时间戳来表示
时间戳:用int来存储
是1970-01-01 00:00:00到当前的秒数。
一般存注册时间,商品发布时间等,并不是用datetime存储,而是用时间戳。
因为datetime虽然直观,但计算不便。
而用int型 存储时间戳,方便计算,对于显示来说,也可以方便的格式化。