数据库与编程不太一样,它会更加的珍惜字节空间,需考虑所定义字段的大小和所定义字段的实际使用(有无符号)。
4.1 数值类型
4.1.1 整型
数据类型 | 字节数 | 无符号数的取值范围 | 有符号数的取值范围 |
---|
TINYINT | 1 | 0~255 | -128~127 |
SMALLINT | 2 | 0~65535 | -32768~32768 |
MEDIUMINT | 3 | 0~16777215 | -8388608~8388608 |
INT | 4 | 0~4294967295 | -2147483648~ 2147483648 |
BIGINT | 8 | 0~18446744073709551615 | -9223372036854775808~9223372036854775808 |
mysql> create table emp(
-> id smallint unsigned auto_increment primary key comment'id',
-> age tinyint unsigned ,
-> kkk int(6) // 宽度限制可以超过,但不能超过所定义数据类型值的范围
-> );
4.1.2 浮点型
浮点型容易丢失精度——>decimal定点数类型不会丢失精度,因为整数和小数分开存储管理。
create 表名 字段名 浮点类型(最大长度位m,小数位d);
mysql> create table t_1(
-> number_1 float(3,1),
-> number_2 decimal(20,19)
-> );
数据类型 | 字节数 | 有符号的取值范围 | 无符号的取值范围 |
---|
FLOAT | 4 | -3.402823466E+38~-1.175494351E-38 | 0和1.175494351E-38~3.402823466E+38 |
DOUBLE | 8 | -1.7976931348623157E+308~2.2250738585072014E-308 | 0和2.2250738585072014E-308~1.7976931348623157E+308 |
DECIMAL(M,D) | M+2 | -1.7976931348623157E+308~2.2250738585072014E-308 | 0和2.2250738585072014E-308~1.7976931348623157E+308 |
最大长度位要大于小数位,超过的小数位会四舍五入。
4.2 字符类型
char
(定长)类型,常用的是varchar
(变长)类型, 它会自动回收多余的字符空间,但是它相对于char
的效率也会更低。
4.3 枚举类型
枚举类型选项的存储非常节省空间,它对选项的的管理使用整数。
4.4 日期与时间类型
数据类型 | 字节数 | 取值范围 | 日期格式 | 零值 |
---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 4 | 1000-01-01~9999-12-31 | YYYY-MM-DD | 0000-00-00 |
TIME | 3 | -838:59:59~ 838:59:59 | HH:MM:SS | 00:00:00 |
DATETIME | 8 | 1000-01-01 00:00:00~9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
TIMESTAMP | 4 | 1970-01-01 00:00:01~2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 0000-00-00 00:00:00 |
mysql> create table t_7(
-> createdTime datetime
-> );
mysql-> select now();
SELECT * FROM t2 WHERE shijian > (now() - INTERVAL 1 day);
SELECT * FROM t2 WHERE shijian < (now() - INTERVAL 1 year);
4.5 文本类型
文本类型用于表示大文本数据,例如,文章内容、评论、详情等。
数据类型 | 储存范围 |
---|
TINYTEXT | 0~255字节 |
TEXT | 0~65535字节 |
MEDIUMTEXT | 0~16777215字节 |
LONGTEXT | 0~4294967295字节 |
4.6 二进制类型
-
binary长度固定,即每条数据占用等长字节空间,保存长度不超过255字节的二进制数据。
-
varbinary可变长度,可以设置最大长度,最大长度65535,适合用在长度可变的二进制数据。
-
blob不设置长度,当不知道属性的最大长度时,适合用blob,能用varbinary的地方不用blob。
-
如果都可以选择,按照查询速度:binary最快,varbinary次之,blob最慢。
参考:http://t.csdnimg.cn/MUsXP
http://t.csdnimg.cn/uE4ZZ
http://t.csdnimg.cn/8Zpm0