Skip to content

(2)MySQL数据类型

标签(空格分隔): MySQL


一.整数类型

整数类型字节数默认显示宽度
TINYINT14
SMALLINT26
MEDIUMINT39
INT411
INTEGER4
BIGINT820
  • 支持 数据类型**(显示宽度)** 的写法,例如int(4)。若不指定,有默认的显示宽度。
  • 若使用int(zerofill)数字没有达到显示宽度的会被0填补,显示类型变为UNSIGNED,长度比默认显示宽度少1
  • 插入数据的长度若大于默认显示宽度,默认显示宽度就无效;但插入的数据不能大于该类型的最大值

二.浮点数和定点数

类型字节数
FLOAT4
DOUBLE8
DECIMAL(M,D)或DEC(M,D)M+2

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

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

三.日期与时间类型

为了方便存储时间而设计

整数类型字节数取值范围零值
YEAR11991~21550000
DATE41000-01-01~9999-12-310000:00:00
TIME3-838.59.59~838.59.5900:00:00
DATETIME81000-01-01 00:00:00~9999-12-31 23.59.590000-00-00 00:00:00
TIMESTAMP419700101080001~2038011911140700000000000000

3.1 YEAR类型

  • 输入4位字符串:插入的日期若超过范围,就会插入0000,并且出现警告
  • 输入2位字符串
  • 00 ~ 69:对应2000~2069 ,PS:输入0也会对应2000
  • 70 ~ 90:对应1970~1990
  • 输入2位数字
  • 0:对应0000
  • 1 ~ 69:对应2001~2069
  • 70 ~ 99:对应1970~1999

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':对应2000~2069
  • YY 取 '70'~'99':对应1970~1999
  • 数字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只能保存字符数据

整数类型允许长度存储空间
TINYTEXT0~255值的长度+2字节
TEXT0~65535值的长度+2字节
MEDIUMTEXT0~167772150值的长度+3字节
LONGTEXT0~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)最大长度已经固定,不足的由\0补全,而VARBINARY(M)自动增加不用。

5.2 BIT与BLOB

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

六.如何使用BOOLEAN型数据?

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

Released under the MIT License.