0%

MySQL数据类型

MySQL数据类型

MySQL支持丰富的数据类型,总体上可以分为数值类型、日期和时间类型、字符串类型。

数值类型包括整数类型、浮点数类型和定点数类型;字符串类型包括文本字符串类型和二进制字符串类型;

具体入下所示

主要包括以下几大类: 数值类型:

  • BIT、BOOL、TINYINT、SMALLINT、MEDIUM INT、 INT、 BIG INT、

  • FLOAT、DOUBLE、DECIMAL(浮点数类型)

字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB、ENUM、SET

日期类型:Date、DateTime、TimeStamp、Time、Year

空间类型:Geometry、Point、LineString、MultiPoint、MultiLineString、MultiPolyGon、Polygon、GeometryCollection

其他类型:JSON

数值类型

一个字节是8位

无符号(UNSIGNED)为翻倍

整型

MySQL中的整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和BIGINT。不同的整数类型,其所需要的存储空间和数值范围不尽相同

数值类型 类型名称 存储空间 取值范围
TINY INT 非常小的整数 1个字节 - 2 ^ 7 ~ 2 ^ 7 -1
SMALL INT 小整数 2个字节 - 2 ^ 15 ~ 2 ^ 15 -1
MEDIUM INT 中型的整数 3个字节 - 2 ^ 23 ~ 2 ^ 23 -1
INT 整数 4个字节 - 2 ^ 31 ~ 2 ^ 31 -1
BIG INT 大整数 8个字节 - 2 ^ 63 ~ 2 ^ 63 - 1

整数类型的显示宽度与数据类型的取值范围无关。

显示宽度只是指定最大显示的数字个数,如果在数据表中插入了大于显示宽度,但是并没有超过整数类型的数值范围的数据,依然可以正确地插入数据,并且能够正确地显示

浮点型

数值类型 类型名称 存储空间 取值范围 说明
DECIMAL(M,D) 定点数类型 M + 1

M + 2
~ 未打包的浮点数,用法类似于FLOAT与DOUBLE
浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
FLOAT 单精度浮点类型 4 个字节 2 ^ 31 ~2 ^ 31 - 1 ~
DOUBLE 双精度浮点类型 8 个字节 2 ^61 ~2 ^ 61 - 1 ~

浮点数类型中的FLOAT和DOUBLE类型在不指定数据精度时,默认会按照实际的计算机硬件和操作系统决定的数据精度进行显示。如果用户指定的精度超出了浮点数类型的数据精度,则MySQL会自动进行四舍五入操作。

补充

数值类型 类型名称 存储空间 说明
BOOL 布尔类型 1字节 TINY INT(1)的别名
BIT 位类型 位类型(M), 每个值存储M位,默认为1,最大64
SERIAL 无符号大整数 8 个字节 BIG INT UNSIGNED NOT NULL AUTO_INCREMEINT UNIQUE

浮点数类型中的FLOAT类型和DOUBLE类型在不指定精度时,默认会按照计算机硬件和操作系统决定的精度进行表示;而定点数类型中的DECIMAL类型不指定精度时,默认为DECIMAL(10,0)。

当数据类型的长度一定时,浮点数能够表示的数据范围更大,但是浮点数会引起精度问题,不适合存储高精度类型的数据。

文本类型

字符类型

字符类型 类型名称 存储空间
CHAR 字符类型 固定长度字符串,最多为255字符
VARCHAR 可变字符类型 可变长字符串,最多为65,535字符
TINYTEXT 短文本类型 可变长度字符串,最多为255字符
TEXT 文本类型 可变长度字符串,最多为65,535字符
MEDIUMTEXT 中等文本类型 可变长度,最多为16,777,215 字符
LONGTEXT 长文本类型 可变长度,最多为4,294,967,295字符

char和varchar

  1. char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。

  2. char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。

  3. char类型的字符串检索速度要比varchar类型的快。

varchar和text

  1. varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。

  2. text类型不能有默认值。

  3. varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。

二进制类型

| 类型 | 类型名称 | 占位 | 说明 | | :————-: | :—————————: | :—: | :
—————————————————————————————: | | BINARY | 二进制字符 | | 类似于CHAR(固定长度)类型,但存储的是二进制字节字符串 |
| VARBINARY | 可变二进制字符 | | 类似于VARCHAR(可变长度)类型,但存储的是二进制字节字符串 | | TINYBLOB | 较小的大二进制对象 | 1 | 最大长度255的字节的BLOB序列

存储时在内容前将使用1个字节表示内容的大小 | | BLOB | 大二进制对象 | 2 | 最大长度63535的字节的BLOB序列
存储时在内容前将使用2个字节表示内容的大小 | | MEDIUM BLOB |
中等大的大二进制对象 | 3 | 最大长度1677215的字节的BLOB序列
存储时在内容前将使用3个字节表示内容的大小 | | LONG BLOB | 大的大二进制对象 | 4 |
最大长度4294967296的字节的BLOB序列
存储时在内容前将使用4个字节表示内容的大小 |

二进制数据(Blob)

1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。

2._BLOB存储的数据只能整体读出。

3._TEXT可以指定字符集,_BLO不用指定字符集。

补充

| 类型 | 类型名称 | 说明 | | :—: | :———: | :—————————————: | | ENUM | 枚举类型 | 由一组固定的合法值组成的枚举 | | SET | 集合类型 |
由一组固定的合法值组成的集合 |

日期类型

MySQL提供了表示日期和时间的数据类型,主要有YEAR类型、TIME类型、DATE类型、DATETIME类型和TIMESTAMP类型。

  • DATE类型通常用来表示年月日;

  • DATETIME类型通常用来表示年、月、日、时、分、秒;

  • TIME类型通常用来表示时、分、秒。

时间/日期类型 类型名称 占位 日期格式
YEAR 1个字节 YYYY
TIME 时间 3个字节 HH:MM:SS
DATE 日期 3个字节 YYYY—MM-DD
TIMESTEAMP 日期时间 4个字节 YYYY—MM-DD HH:MM:SS
DATETIME 日期时间 8个字节 YYYY—MM-DD HH:MM:SS

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间

每种日期和时间类型都有一个有效值范围,如果超出这个有效值范围,则会以0进行存储

空间类型

Geometry:存储任意几何体类型 Point:存储二维中的点类型 LineString:存储点之间的线型插值曲线类型 MultiPoint:存储点的集合类型 MultiLineString:存储点之间的线型插值曲线集合类型
MultiPolyGon:存储多边形集合类型 Polygon:存储多边形类型 GeometryCollection:存储任意类型集合体的集合类型

数据类型的属性

MySQL关键字 含义

NULL 数据列可包含NULL值 NOT NULL 数据列不允许包含NULL值 DEFAULT 默认值 PRIMARY KEY 主键 AUTO_INCREMENT 自动递增,适用于整数类型 UNSIGNED 无符号 CHARACTER
SET name 指定一个字符集