本文以MySQL8为例,MySQL支持所有SQL标准 种的 数字数据类型,主要支持数值类型、日期和时间类型、字符串(字符和字节)类型、空间类型和 JSON数据类型。
1. 数值类型
MySQL数值类型包括整型数值(TINYINT、SMALLINT
、 MEDIUMINT、
INT
、BIGINT),定点类型(DECIMAL
),浮点类型(DOUBLE、FLOAT),位值类型(BIT)。
1.1 整型类型(精确值)
MySQL支持 SQL 标准整数类型 INTEGER
(或INT
)和 SMALLINT
。作为标准的扩展,MySQL 还支持整数类型 TINYINT
、MEDIUMINT
和 BIGINT
。
数据类型 | 占用空间(字节) | 取值范围(有符号) | 取值范围(无符号) |
TINYINT | 1 | -128到127 | 0到255 |
SMALLINT | 2 | -32768到32767 | 0到65535 |
MEDIUMINT | 3 | -8388608到8388607 | 0到16777215 |
INT | 4 | -2147483648到2147483647 | 0到4294967295 |
BIGINT | 8 | -9223372036854775808到9223372036854775807 | 0到18446744073709551615 |
注意:开发中常见写法INT(N),不管N是多少,INT占用的都是4个字节;另外N显示的是宽度,不足的时候补0,超过的无视长度,直接显示数值。必须要设置unsigned zerofill才生效。
1.2 定点类型(精确值)
DECIMAL
和NUMERIC
类型存储精确的数字数据值 ,在MySQL中,NUMERIC被实现为DECIMAL。它是以二进制格式存储值。可以通过指定精度和小数位数来达到自己想要的数值。例如:
DECIMAL(5,2) 其中5指的是精度,2是比例,可以理解取值范围为-999.99到999.99。
数值类型 | 占用空间(字节) | 取值范围 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2;否则为D+2 | 依赖M和D |
1.3 浮点类型(近似值)
MySQL中对FLOAT(单精度值)使用四个字节,对DOUBLE(双精度值)使用八个字节。
数据类型 | 占用空间(字节) | 取值范围(有符号) | 取值范围(无符号) |
FLOAT | 4 | -3.402823466 E+38到-1.175 494 351 E-38 ,0, 1.175494351E到383.402823466351 E+38 | 0,1.175494351E到383.402823466 E+38 |
DOUBLE | 8 | -1.7976931348623157 E+308到2.2250738585072014E-308,0,2.2250738585072014E到3081.7976931348623157E+308) | 0,2.2250738585072014E到3081.7976931348623157E+308 |
1.4 位值类型
MySQL中BIT
数据类型用于存储位值,范围从1到64。
2. 日期和时间类型
MySQL中日期和时间类型有DATE、TIME、DATETIME、TIMESTAMP、YEAR。
数据类型 | 占用空间(字节) | 取值范围 | 格式 |
DATE | 3 | 1000-01-01到9999-12-31 | YYYY-MM-DD |
TIME | 3 | -838:59:59到838:59:59 | HH:MM:SS |
YEAR | 1 | 1901到2155 | YYYY |
DATETIME | 8 | 1000-01-01 00:00:00到9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 4 | 1970-01-01 00:00:00到2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS |
3. 字符串类型
MySQL中字符串数据类型有VARCHAR、CHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET。
数据类型 | 占用空间(字节) | 说明 |
CHAR | 0到255 | 定长字符串 |
VARCHAR | 0到65535 | 变长字符串 |
TINYBLOB | 0到255 | 不超过 255 个字符的二进制字符串 |
BLOB | 0到65535 | 二进制形式的长文本数据 |
TINYTEXT | 0到255 | 短文本字符串 |
TEXT | 0到65535 | 长文本数据 |
MEDIUMBLOB | 0到16777215 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0到16777215 | 中等长度文本数据 |
LONGBLOB | 0到4294967295 | 二进制形式的极大文本数据 |
LONGTEXT | 0到4294967295 | 极大文本数据 |
ENUM | 1或2 | 枚举类型,只能有一个枚举字符串值取决于枚举值的数目 (最大值为65535) |
SET | 、2、3、4或8 | 一个设置,字符串对象可以有零个或 多个SET成员,取决于集合 成员的数量(最多64个成员) |
BINARY(M) | M | 固定长度二进制字符串 |
VARBINARY(M) | M+1 | 可变长度二进制字符串 |
4. 空间类型
MySQL 具有对应于 OpenGIS 类的空间数据类型。单值类型GEOMETRY、POINT、LINESTRING、POLYGON,它们的值限制为特定的几何类型。其他集合值包括MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。
5. JSON数据类型