首页 专题 文章 代码 归档
Mysql 常见数据类型
2020.03.09 20:32 2020.03.09 20:34

1. 常见数据类型

  1. 数值型
  • 整型
  • 小数
    • 定点数
    • 浮点数
  1. 字符型
  • 较短的文本
    • char
    • varchar
  • 较长的文本
    • text
    • blob
  1. 日期型

2. 整型

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1字节 (-128,127) (0,255) 小整数值
SMALLINT 2字节 (-32 768,32 767) (0,65535) 大整数值
MEDIUMINT 3字节 (-8 388 608,8 388 607) (0,16777215) 大整数值
INT或INTEGER 4字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值

所以对于整型(N)这种形式,我们只要明白两点:

  • 无论 N 是多少和该类型所占字节数无关
  • N 表示的是显示宽度,不足的用 0 补足,超过的无视长度而直接显示整个数字,但这要整型设置了 unsigned zerofill 才有效
  • 创建时可以不指定N,默认是11

前面填充0,需要怎么弄?无符号+zerofill

create table boo
(
    i int unsigned zerofill
);


insert into boo
values (11);
select *
from boo;

3. 小数

1、浮点型:float(M,D)、double(M,D)

2、定点型:dec(M,D)、decimal(M,D)


1、M,D都可以省略,M代表整数位+小数位长度,D代表小数点后D位,

注意:float和double如果D超出了,插入没问题(但是精度有问题);

如果decimal超出了,插入时不能成功的;

4. 字符型

char和varchar

字符串类型 最多字符数 描述
char(M) M M为0-22之间的整数
varchar(M) M M为0-65535之间的整数

varchar为可变字符,也即:占用空间为你实际插入的字符的空间,最大为M;


binary和varbinary,和char类似,只不过是保存二进制数据;

5. Enum类型

插入的值只能是创建时中指定的值之一;

create table tab_d
(
    c1 enum ('a','b','c')
);

6. Set类型

和枚举类型Enum类似,只不过可多个:

create table tab_s
(
    c1 set ('a','b','c','d')
);

insert into tab_s
values ('a,b,c');

select *
from tab_s;

注意:Enum和Set都不区分大小写;

7. 日期型

mysql五种数据类型如下:

类型 所占空间
DATETIME 8Byte
DATE 3Byte
TIMESTAMP 4Byte
YEAR 1Byte
TIME 3Byte

DATETIME 和 DATE:

类型 范围
DATETIME 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
DATE 1000-01-01 ~ 9999-12-31

其基本格式为YYYY-MM-DD HH:MM:SS

但是数据库对于时间的限制十分宽松,很多别的写法也可以;


TIMESTAMP和DATETIME

timestamp 的结果和datetime 是一样的,但是timestamp占4Byte,范围为: 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07 它保存的是这个时间距离1970-01-01 00:00:00的毫秒数。

Timestampdatetime还有些区别:

  • 在建表时,Timestamp可以为日期设置一个默认值,而datetime不行;
  • 在更新表时,Timestamp可以设置为自动更新时间为当前时间。

写法如下:

create table test2(
    pid int primary key  auto_increment,
    uptime timestamp null default current_timestamp on update current_timestamp,
    hobby varchar(30)
);

但是在首次插入时,uptime依然没有时间,因为上面我们设置可以为null,所以:

create table test2(
    uptime timestamp not null default current_timestamp on update current_timestamp,
);

YEAR 和 TIME

YEAR占一个字节,范围为 1901 ~ 2155

TIME占三个字节,范围为 -838:59:59 ~ 838:59:59

可以看到TIME类型不仅小时数可以大于23,甚至可以保存负数,这是因为TIME不仅仅可以保存一天的时间,还可以用来保存时间间隔。

TIME和DATETIME一样,可以显示微秒时间,只是插入时同样会被截断。

本节阅读完毕! (分享
二维码图片 扫描关注我们哟