常用:int、double、decimal、char、varchar、blob、datetime、timestamp
数据库与编程不太一样,它会更加的珍惜字节空间,需考虑所定义字段的大小和所定义字段的实际使用(有无符号)。
4.1 数值类型
都可选UNSIGNED,无符号,加在类型后。
BIT(M):位类型,M指定位数,默认1,范围1~64,(M+7)/8个字节。如果一个值只有0/1,可以用。使用不多。
存的是b'11'
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 浮点型:float、double、decimal
浮点型容易丢失精度——>decimal定点数类型不会丢失精度,因为整数和小数分开存储管理。
最大长度位m(总位数)要大于小数位n,超过的小数位会四舍五入。
若省略,m默认10,n默认0。
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 字符类型
varchar、blob和text类都是变长类型。每个类型的存储需求取决于列值的实际长度(L),而不是该类型的最大可能的大小(M)。
例如,VARCHAR(10),列可以容纳最大长度为10的字符串。实际存储需求是字符串的长度L,加上一个记录字符串长度的字节。对于字符串'abcd',L是4,但存储需要5个字节。
varchar不够用,用text。
注意字符和字节:
char
(定长)类型,不足的补空格,常用的是varchar
(变长)类型, 它会自动回收多余的字符空间,但是它相对于char
的效率也会更低。
4.3 枚举类型
枚举类型选项的存储非常节省空间,它对选项的的管理使用整数。
4.4 日期与时间类型
自动更新时间戳:
数据类型 | 字节数 | 取值范围 | 日期格式 | 零值 |
---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 |
DATE | 3 | 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 二进制类型:BLOB
-
binary长度固定,即每条数据占用等长字节空间,保存长度不超过255字节的二进制数据。
-
varbinary可变长度,可以设置最大长度,最大长度65535,适合用在长度可变的二进制数据。
-
blob不设置长度,当不知道属性的最大长度时,适合用blob,能用varbinary的地方不用blob。
-
如果都可以选择,按照查询速度:binary最快,varbinary次之,blob最慢。