(2)MySQL数据类型

一.整数类型

整数类型 字节数 默认显示宽度
TINYINT 1 4
SMALLINT 2 6
MEDIUMINT 3 9
INT 4 11
INTEGER 4
BIGINT 8 20
  • 支持 数据类型**(显示宽度)** 的写法,例如int(4)。若不指定,有默认的显示宽度。
  • 若使用int(zerofill)数字没有达到显示宽度的会被0填补,显示类型变为UNSIGNED,长度比默认显示宽度少1
  • 插入数据的长度若大于默认显示宽度,默认显示宽度就无效;但插入的数据不能大于该类型的最大值

二.浮点数和定点数

类型 字节数
FLOAT 4
DOUBLE 8
DECIMAL(M,D)或DEC(M,D) M+2

定点数DECIMAL的取值范围与DOUBLE相同,有效范围由M决定。可以用数据类型(M,D)指定浮点数,定点数精度。

  • M称为精度,数据的总长度,不算小数点
  • D称为标度,小数点后的长度
  • 虽然定义标准可以定义浮点数,但最好不要使用,因为会影响数据库迁移。
  • 若插入值精度大于默认精度,会进行四舍五入处理。DECIMAL(M,D)会有警告

三.日期与时间类型

为了方便存储时间而设计

整数类型 字节数 取值范围 零值
YEAR 1 1991~2155 0000
DATE 4 1000-01-01~9999-12-31 0000:00:00
TIME 3 -838.59.59~838.59.59 00:00:00
DATETIME 8 1000-01-01 00:00:00~9999-12-31 23.59.59 0000-00-00 00:00:00
TIMESTAMP 4 19700101080001~20380119111407 00000000000000

3.1 YEAR类型

  • 输入4位字符串:插入的日期若超过范围,就会插入0000,并且出现警告
  • 输入2位字符串
  • 0069:对应20002069 ,PS:输入0也会对应2000
  • 7090:对应19701990
  • 输入2位数字
  • 0:对应0000
  • 169:对应20012069
  • 7099:对应19701999

3.2 TIME类型

  1. 赋值格式:D HH:MM:SS 类型:字符串
    输入时可以任意输入 D HH HH:MM SS等都可以
  • D:天数,取值范围 0~34,保存时 $$HH=24*D+HH$$
    如输入'2 11:30:50',根据公式转换为'59:30:50'
  • HH:取值范围 0~23
  • SS,MM:取值范围 0~59
  1. 赋值格式:HHMMSS 类型:字符串或数值
  • 若输入323432,无论字符串或数值,转化为 32:34:32
  • 若输入0'0',输出0000:00:00
  1. 插入CURRENT_TIMENOW()输出现在的系统时间

3.3 DATE类型

  • 字符串YYYY-MM-DDYYYYMMDD格式表示,YYYY年,MM月,DD日
  • 还支持用任何标点符号分割,如YYYY*MM*DD,YYYY@MM@DD
  • 字符串YY-MM-DDYYMMDD格式表示
  • YY 取 '00''69':对应20002069
  • YY 取 '70''99':对应19701999
  • 数字YYYYMMDDYYMMDD格式表示,YY取值如上
  • 插入CURRENT_DATENOW()输出现在的系统日期

虽然可以用不标准的语法,但是实际中还是使用标准语法好

3.4 DATETIME类型

DATE+TIME 组合,去掉TIME类型的D
YYYY-MM-DD HH:MM:SS标准写法用法与DATE类型一样

只能用NOW()输出现在的系统日期时间

3.5 TIMPSTAMP类型

TIMPSTAMP类型的显示格式与DATETIME是一样的,只不过范围比DATETIME小
区别:

  • TIMPSTAMP类型插入NOW()NULLCURRENT_DATESTAMP和无任何输入时候,都会输入系统当前的时间
  • 会根据不同时区来显示时间,缺点是范围太小

四.字符串类型

字符串类型包括:CHAR,VARCHAR,BLOB,TEXT,ENUM,SET

4.1 CHAR与VARCHAR

在建表的过程中指定了M-最大长度字符串类型(M)

  • CHAR: 长度0~255,即0 <= M <= 255
  • VARCHAR: 长度0~65535,如VARCHAR(100),不是每条记录都占100空间,而是在100空间内使用多少,分配多少$$实际占用空间=字符串长度+1$$

4.2 TEXT类型

TEXT只能保存字符数据

整数类型 允许长度 存储空间
TINYTEXT 0~255 值的长度+2字节
TEXT 0~65535 值的长度+2字节
MEDIUMTEXT 0~167772150 值的长度+3字节
LONGTEXT 0~4294967295 值的长度+4字节

4.3 ENUM类型

又称为枚举类型,创建表的时候,其基本形式如下:
属性名 ENUM('值1','值2',···'值n-1','值n')这些值末尾的空格会被自动删除

插入时候:

1.不加NOT NULL

  • 不指定插入值或者指定插入null,那插入的值为null
  • 插入时候会自动创建索引,插入null,索引为null;插入非指定值,索引为0

2.加上NOT NULL

  • 不插入指定值:会插入值1,也就是第一个元素
  • 插入null,会报错

若只能选取列表中一个值,用ENUM,但有多个值的话,就是用set,我们往下看

4.4 SET类型

格式:属性名 SET('值1','值2',···'值n-1','值n')细节与ENUM差不多,但是SET元素最高只有64位。与ENUM一样,插进去的每一个元素都有顺序的索引值,但插入的元素顺序无关紧要,例如你插入多个值,显示的数据会按照设定时候的顺序排序

五.二进制类型

整数类型 取值范围
BINARY(M) 字节数为M,允许范围定长0~M的二进制字符串
VARBINARY(M) 允许范围变长0~M的二进制字符串,字节为数值长度+1
BIT(M) M位二进制数据,M最大值64
TINYBLOB 可变长二进制数据,最多255字节
BLOB 可变长二进制数据,最多(2^16-1)字节
MEDIUMBLOB 可变长二进制数据,最多(2^24-1)字节
LONGMBLOB 可变长二进制数据,最多(2^32-1)字节

5.1 BINARY(M)与VARBINARY(M)

BINARY(M)最大长度已经固定,不足的由补全,而VARBINARY(M)自动增加不用。

5.2 BIT与BLOB

BIT没什么好说的插入的是二进制
BLOB是一种特殊的二进制类,可以保存数据量很大的二进制,比如图片、PDF文档、MP3,其与TEXT很像,不过操作的数据类型不同。

六.如何使用BOOLEAN型数据?

在MySQL中,BOOL与BOOLEAN类型等价于TINYINT(1)

原文地址:https://www.cnblogs.com/ikonon/p/7786807.html