整型
类型 | 字节 | 位 | 描述 |
---|---|---|---|
Tinyint | 1 | 8 | 默认有符号:-128127;无符号:0255 |
Smallint | 2 | 16 | |
Mediumint | 3 | 24 | |
int | 4 | 32 | |
Bigint | 8 | 64 |
整型列的可选属性
tinyint(M) unsigned zerofill
M:代表宽度,只有在zerofill是才有意义
unsigned:无符号类型,非负(影响存储范围)
zerofill:零填充(如果某列为zerofill则只能是无符号类型即非负)、
浮点型与定点型
-
浮点型:Float(M,D):M代表总位数,D代表小数的个数
eg:float(6,2)即可以存储数的范围:-9999.99~+9999.99
-
定点型:descrimal(M.D);M和D的含义同浮点型
注:浮点类型和定点类型所占的字节数是一定的,一般为4或8个字节;并不会因此存储的数字的大小而影响其所占的字节数
字符型
- 在utf编码里面一个汉字占3个字节
- 一个字母占一个字节
- 一个汉字为一个字符
定义
char | 定长 | char(M) | M代表宽度,即可容纳的字符数 |
---|---|---|---|
varchar | 变长 | varchar(M) | M代表宽度,即可容纳的字符数 |
区别:
宽度 | 实际存储的字符数(N<=M) | 所占字符数 | 利用率 | |
---|---|---|---|---|
char | M | N(不够M个字符其余用空格补齐,读取的时候在将尾部的空格去掉,因此如果保存含有空格的数据会丢失长度) | M(0<=M<=255) | N/M <= 100% |
varchar | M | N(末尾有空格,仍保存,取出的时候不会丢失长度) | N+1~2字节(0<=M<=65535 约2w~3w受字符集的影响) | M/(M+1~2)< 100% |
注:varchar中最多可以存储的字符数为:(2^15 = 65535个字节)
若以ASCII为例:varchar中最多可以存储的字符数为65535
若以utf为例:varchar中最多可以存储的字符数为:222000
如何选择
-
空间利用效率:
eg:四字成语表:char(4)、140字的个人简介或微博 varchar(140)
-
速度
注:text类型也用于存储文本串声明方式:content text
所占字符数大约为2w~3w
日期时间
年–>year(占一个字节;表示:1901~2155之间的年份【0000,表示错误时选择】)
年-月-日–>date 范围在1000-01-01 ~ 9999-12-31
hh-mm-ss–>time 范围在 -838:59:59 ~ +838:59:59
年-月-日-hh-mm-ss–>datetime 范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
注1:如果输入的是两位数字则:
0069之间表示的是:20002069
7099之间表示的是:19701999
(计算机的时间是从1970-01-01 00:00:00开始算起)
注2:在开发中很少用日期时间类型来表示一个精确到秒的列。
原因:虽然日期时间类型方便查看,但是不方便操作;因此引出了时间戳
**时间戳:**是1970-01-01 00:00:00到当前的秒数。一般用于存注册时间,商品发布时间
- 缺点:不直观
- 优点:方便计算,方便格式化
建表案例
create table myTable(
name char(3) not null default ' ',
age tinyint unsigned not null default 0,
eamil varchar(30) not null default ' ',
telphone varchar(11) not null default ' ',
salary decimal(7,2) not null default '188.86',
riqi date not null default'2019-5-4'
) charset utf8;