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
char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<
=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。char类型的字符串检索速度要比varchar类型的快。
varchar和text
varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255)
,text是实际字符数+2个字节。text类型不能有默认值。
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 指定一个字符集