MySQL拥有不同的表类型,而表中的数据类型也有所不同
数值类型
整数类型
注意
1.为数值类型指定宽度时,限制的仅仅是查询结构的显示宽度,而不是存储宽度
几个例子
1.有符号
create table t1(n tinyint); insert into t1 values(-129),(-128),(127),(128);
默认有符号,超过范围仍然可以存储,但是数值变为临界值
2.无符号
create table t2(n tinyint unsigned); insert into t2 values(-129),(-128),(255),(256); select* from t2;
无符号最小值为0,存任何负数都变为0,最大值为255
浮点类型
float/double/decimal
日期类型
year:范围为1901-2155
alter table t2 add time year(5); desc t2; insert into t2(time) values(1700,1990,2156);
无论year的长度设置为多少,默认都是4,超过范围,存0000
date:范围为1000-01-01/9999-12-31
time:范围为'-838:59:59'/'838:59:59'
datetime:范围为1000-01-01 00:00:00/9999-12-31 23:59:59
create table t1(d date,t time,dt datetime); insert into t1 values(now(),now(),now());
timestamp:范围为1970-01-01 00:00:00/2037 年某时
create t1(t timestamp); insert into t1 values(); insert into t1 values(null);
小结
1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。
2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,操作系统以及客户端连接都有时区的设置。
3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。
4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空,默认值为当前时间,如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。
推荐使用timestamp
字符串类型
小结
枚举类型与集合类型
enum 单选 只能在给定的范围内选一个值,如性别 sex 男male/女female
set 多选 在给定的范围内可以选择一个或一个以上的值(爱好1,爱好2,爱好3...)