MySQL作为广泛使用的关系型数据库管理系统,提供了丰富多样的数据类型以满足不同场景的需求
本文将详细介绍MySQL中的常用数据类型,并通过一览表的形式直观展示,帮助开发者更好地理解和应用
一、数值类型 数值类型用于存储数字,MySQL提供了整数类型、浮点类型和定点数类型
1. 整数类型 整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
这些类型的主要区别在于存储大小和取值范围
-TINYINT:占用1个字节,有符号范围是-128到127,无符号范围是0到255
适用于存储非常小的整数
-SMALLINT:占用2个字节,有符号范围是-32768到32767,无符号范围是0到65535
适用于存储较小的整数
-MEDIUMINT:占用3个字节,有符号范围是-8388608到8388607,无符号范围是0到16777215
适用于存储中等大小的整数
-INT:占用4个字节,有符号范围是-2^31到2^31-1,无符号范围是0到2^32-1
是常用的整数类型,适用于存储标准大小的整数
-BIGINT:占用8个字节,有符号范围是-2^63到2^63-1,无符号范围是0到2^64-1
适用于存储非常大的整数
需要注意的是,整数类型可以选择是否带符号(UNSIGNED),不带符号的整数类型取值范围从0开始
此外,整数类型还支持显示宽度属性(M),但这并不影响实际存储的取值范围,只是用于显示时的格式控制
从MySQL 8.0.17开始,不推荐使用显示宽度属性
2. 浮点类型 浮点类型用于存储小数,包括FLOAT和DOUBLE
-FLOAT:单精度浮点数,存储需求较小,但精度有限
适用于存储对精度要求不高的浮点数
-DOUBLE:双精度浮点数,存储需求较大,但精度更高
适用于存储对精度要求较高的浮点数
浮点类型可以使用(M,D)形式指定精度和标度,其中M是总位数,D是小数位数
但由于浮点数的精度限制,实际存储时可能会有误差
3. 定点数类型 定点数类型只有DECIMAL,用于存储高精度的十进制数
DECIMAL类型以字符串形式存储,避免了浮点数的精度问题
-DECIMAL(M,D):M是总位数,D是小数位数
DECIMAL类型的取值范围由M和D决定,可以存储非常大的高精度数
二、日期和时间类型 日期和时间类型用于存储日期和时间信息,包括YEAR、TIME、DATE、DATETIME和TIMESTAMP
-YEAR:存储年份,格式为YYYY
-TIME:存储时间,格式为HH:MM:SS
-DATE:存储日期,格式为YYYY-MM-DD
-DATETIME:存储日期和时间,格式为YYYY-MM-DD HH:MM:SS
取值范围较大,适用于存储完整的日期和时间信息
-TIMESTAMP:也存储日期和时间,但与DATETIME不同的是,TIMESTAMP在插入记录时如果没有指定值,会自动设置为当前时间
此外,TIMESTAMP的取值范围较小,且受时区影响
三、字符串类型 字符串类型用于存储文本数据,MySQL提供了多种字符串类型以满足不同需求
1. 文本字符串类型 -CHAR:固定长度字符型,存储定长字符串
如果插入的字符串长度小于定义的长度,会自动在右侧填充空格
适用于存储长度固定的字符串
-VARCHAR:可变长度字符型,存储变长字符串
只占用实际字符串长度加上1或2个字节的额外空间(用于存储字符串长度)
适用于存储长度不固定的字符串
-TEXT系列:包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,用于存储大容量的文本数据
根据存储需求选择不同的类型
2. 二进制字符串类型 -BINARY和VARBINARY:与CHAR和VARCHAR类似,但存储的是二进制数据
适用于存储图片、音频等二进制信息
-BLOB系列:包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB,用于存储大容量的二进制数据
根据存储需求选择不同的类型
3. 枚举和集合类型 -ENUM:枚举类型,只能取预定义集合中的一个值
适用于存储有限集合中的单个值,如性别字段
-SET:集合类型,可以取预定义集合中的一个或多个值
适用于存储有限集合中的多个值,如兴趣爱好字段
四、其他数据类型 MySQL还提供了一些其他数据类型,包括BIT、JSON、空间数据类型等
-BIT:位类型,用于存储位字段值
可以指定存储位数(1到64位)
-JSON:用于存储JSON格式的数据
MySQL提供了丰富的JSON函数来操作JSON数据
-空间数据类型:用于存储地理空间数据,包括点(POINT)、线(LINESTRING)、多边形(POLYGON)等类型
适用于GIS(地理信息系统)应用
MySQL常用数据类型一览表 以下是一个直观的MySQL常用数据类型一览表,帮助开发者快速了解各种数据类型的存储需求、取值范围和适用场景
| 数据类型 | 存储需求 | 取值范围 | 适用场景 | | --- | --- | --- | --- | | TINYINT | 1字节 | 有符号:-128到127;无符号:0到255 | 存储非常小的整数 | | SMALLINT | 2字节 | 有符号:-32768到32767;无符号:0到65535 | 存储较小的整数 | | MEDIUMINT | 3字节 | 有符号:-8388608到8388607;无符号:0到16777215 | 存储中等大小的整数 | | INT/INTEGER | 4字节 | 有符号:-2^31到2^31-1;无符号:0到2^32-1 | 存储标准大小的整数 | | BIGINT | 8字节 | 有符号:-2^63到2^63-1;无符号:0到2^64-1 | 存储非常大的整数 | | FLOAT | 4字节 | 单精度浮点数 | 存储对精度要求不高的浮点数 | | DOUBLE | 8字节 | 双精度浮点数 | 存储对精度要求较高的浮点数 | | DECIMAL(M,D) | 可变 | 高精度十进制数,由M和D决定取值范围 | 存储高精度的十进制数 | | YEAR | 1字节 | YYYY格式年份 | 存储年份 | | TIME | 3字节 | HH:MM:SS格式时间 | 存储时间 | | DATE | 3字节 | YYYY-MM-DD格式日期 | 存储日期 | | DATETIME | 8字节 | YYYY-MM-DD HH:MM:SS格式日期和时间 | 存储完整的日期和时间信息 | | TIMESTAMP | 4字节 | YYYY-MM-DD HH:MM:SS格式日期和时间,受时区影响 | 存储日期和时间,自动设置为当前时间(如果未指定) | | CHAR(n) | n字节 | 定长字符串,长度固定为n | 存储长度固定的字符串 | | VARCHAR(n) | 可变 | 变长字符串,最大长度为n | 存储长度不固定的字符串 | | T