工作所需,需要深入了解下MySQL的数据类型。
MySQL的数据类型
MySQL的数据类型共有36种,主要包括以下五大类:
整数类型 | BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT |
浮点数类型 | FLOAT、DOUBLE、DECIMAL |
字符串类型 | CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB |
日期类型 | DATE、DATE TIME、TIMESTAMP、TIME、YEAR |
其他数据类型 | BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等 |
1、整型
MySQL数据类型 | 含义(有符号) |
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(+-9.22*10的18次方) |
取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。
2、浮点型
MySQL数据类型 | 含义 |
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
m代表整个数字位数为m,d代表小数点不超过d位。假设定义为float(5,2),则数据111.222,实际数据库里存的是111.45.
3、定点数
定点数decimal(m,d) ,参数m<65 是总个数,d<30 且 d<m 是小数位。
定点数和浮点数在数据库中存储的区别是,浮点型存的四舍五入近似值,定点类型存放的是精确值。
- 对货币等对精度敏感的数据,应该用定点数存储;
- 编程中,如果用到浮点数,要特别注意误差问题,并尽量避免做浮点数比较;
4、字符串(char,varchar,_text)
MySQL数据类型 | 含义 |
char(n) | 固定长度,最多255个字符 |
varchar(n) | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
char和varchar的区别:
char(n): 固定长度,若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。并且char(n),不管是实际存入几个字符,都将占用n个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),比如varchar(4),存入3个字符将占用4个字节。
char类型的字符串检索速度要比varchar类型的快。
6.日期时间类型
MySQL数据类型 | 含义 |
date | 日期 如 2019-10-2 |
time | 时间 如12:25:11 |
datetime | 日期时间 2019-10-2 12:25:11 |
timestamp | 自动存储记录修改时间 |
Year | 以YYYY的格式显示。比如:2009 |
timestamp 的时间会随其他字段修改的时候自动刷新,所以这一般用来存储最后被修改的时间。
数据类型的属性定义
MySQL关键字 | 含义 |
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |