MYSQL 数据类型 总结

一、常见数据类型

1、数值型

1.1整型

整型
数据类型字节范围
TINYINT1

有符号:(-128,127)

无符号:(0,255)

SMALLINT2

有符号:(-32 768,32 767)

无符号:(0,65 535)

MEDIUMINT3

有符号:(-8 388 608,8 388 607)

无符号:(0,16 777 215)

INT或INTEGER4

有符号:(-2 147 483 648,2 147 483 647)

无符号:(0,4 294 967 295)

BIGINT8

有符号:(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)

无符号:(0,18 446 744 073 709 551 615)

 

  • 默认是有符号,如果要设置无符号,在类型后面添加UNSIGNED 比如:

CREATE TABLE 数据表 (

列1 INT (显示长度)【ZEROFILL】,#显示长度代表了可显示的最大宽度,如果不写,INT默认长度为11,不够显示长度的数据,并且搭配了ZEROFILL 系统会自动补充0

列2 INT UNSIGNED )    #列2 就设置了无符号,只能为正数,范围更大

  • 如果插入数据超出范围 。系统会给出out of range异常,实际插入数据的临界值。

1.2 小数      浮点数 和 定点数

浮点数类型字节范围
FLOAT4

有符号:(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)

无符号:0,(1.175 494 351 E-38,3.402 823 466 E+38)

DOUBLE8

不用管,非常非常大

定点数类型字节范围

DECIMAL

简写DEC(M,D)

M+2

范围和double相同,有效值由M和D决定

写法:

float(M,D)     double(M,D)   DEC(M,D)

说明:

  1. (M,D)可以省略,省略后 浮点型(float和double)是根据插入的数字自动反推他们的长度。但是定点数默认长度为DEC(10,0)
  2. M指的是 整数部分长度+小数部分长度  如果超过范围,则插入临界值
  3. D指小数部分的有效数字(四舍五入规则,不足补0。

数值型使用原则 ☆

    在满足需求的条件下。选择的数据类型越简单越好,能保存的数值类型越小越好(为了节约内存资源)

2、字符型

2.1短文本 char,varchar

字符串类型最多字符数描述及储存要求
CHAR(M)MM为 0~255之间的整数
VARCHAR(M)MM为0-65535之间的整数

注意事项:

char(M) 里面的(M)可以省略,默认值为1;VARCHAR的(M)不能省略

char 和 varchar 的选择:

      char是固定长度字符,varchar是可变长度字符。比如char(10) 但只用了2个字符,另外8个就必须浪费掉。所以char会浪费空间,varchar比较节约空间。但是char的效率比VARCHAR效率高。  所以遇到比如存储名字,性别这种简单场景,建议用char,其他都用varchar

2.2长文本text,blob(较长的二进制数据,比如图像数据)

2.3 枚举类型

ENUM枚举类型

要求插入的值必须属于列表中指定的值之一。如果列表成员为1-255,则需要1个字节存储如果列表成员为255-65535,则需要2个字节存储最多需要65535个成员!

exp:

create table 某数据表(

 列1 ENUM (‘x’,'y','z') #后面插入某数据表列1的数据,必须为x,y,z之一,不区分大小写,只能插一个

);

SET类型 用于保存集合

说明:和Enum类型类似,里面可以保存0-64个成员。和Enum类型最大的区别是: SET类型一次可以选取多个成员,而Enum只能选一个根据成员个数不同,存储所占的字节也不同。同样不区分大小写

exp:

create table 某数据表(

 列1 SET (‘x’,'y','z','m') #后面插入某数据表列1的数据,必须为x,y,z,m里面的任意多个,不区分大小写,可插多个

);

插入语句

INSERT INTO 某数据表 VALUES('x,y');  #在某数据表的列1插入(x,y)。执行插入的时候,逗号隔开就好了,不用每个都去打单引号

 

3、日期型   日期必须用单引号引起来

日期类型字节范围格式

DATE

只保存日期

41000-01-01—9999-12-31YYYY-MM-DD 

DATETIME

保存时间和日期 

常用

81000-01-01 00:00:00—9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS 

TIMESTAMP

保存时间和日期

 常用

4970-01-01 00:00:00—2038年某个时刻YYYY-MM-DD HH:MM:SS

TIME

只保存时间

3'-838:59:59'—'838:59:59'HH:MM:SS

YEAR

只保存年

11901—2155YYYY

DATETIME和TIMESTAMP选择:

1、Timestamp支持的时间范围较小,取值范围:19700101080001-2038年的某个时间  Datetime的取值范围: 1000-1-1--9999-12-31

2、timestamp和实际时区有关,更能反映实际的日期,而datetime则只能反映出插入时的当地时区

3、timestamp的属性受Mysql版本和SQLMode的影响很大

由于timestamp占的空间小,并且更能反映实际时间,所以一般都用timestamp,超过范围再用datetime

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值