MySQL 的数据类型有分为 5 种,分别是字符串类型、数字类型、日期时间类型、二进制类型、空间类型等。常用的是字符串类型、日期时间类型和数字类型。
数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。在创建表时必须为每个列设置正确的数据类型和长度。
MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。
下表中列出了 MySQL 中的字符串数据类型,括号中的M表示可以为其指定长度。
类型名称 | 说明 | 范围 | 存储需求 |
---|---|---|---|
CHAR(M) | 固定长度非二进制字符串 | 0-255 字节 | M 字节,1<=M<=255 |
VARCHAR(M) | 变长非二进制字符串 | 0-65535 字节 | L+1字节,在此,L< = M和 1<=M<=65535 |
TINYTEXT | 非常小的非二进制字符串 | 0-255 字节 | L+1字节,在此,L<2^8 |
TEXT | 小的非二进制字符串 | 0-65 535 字节 | L+2字节,在此,L<2^16 |
MEDIUMTEXT | 中等大小的非二进制字符串 | 0-16 777 215 字节 | L+3字节,在此,L<2^24 |
LONGTEXT | 大的非二进制字符串 | 0-4 294 967 295 字节 | L+4字节,在此,L<2^32 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 0-65535个 | 1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET | 一个设置,字符串对象可以有零个或 多个SET成员 | 0-64个 | 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
例如,一个 VARCHAR(10) 列能保存一个最大长度为 10 个字符的字符串,实际的存储需要字符串的长度 L 加上一个字节以记录字符串的长度。对于字符 “abcd”,L 是 4,而存储要求 5 个字节。具体详情可阅读 MySQL字符串类型 |
这里把数字型分为整数数据类型(精确值)和小数数据类型(精确、近似值)。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
tinyint | 1 Bytes | (-128,127) | (0,255) | 极小整数值 |
smallint | 2 Bytes | (-32 768,32 767) | (0,65 535) | 小整数值 |
mediumint | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 中等大小整数值 |
int或integer | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
bigint | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
DECIMAL类型NUMERIC 存储精确的数值数据值。当需要保持准确的精度(例如货币数据)时,可以使用这些类型。浮点数是一种近似表示小数的数据类型,适用于具有广泛范围和精度要求不太高的计算。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | M+2 个字节 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。具体详情可阅读 MySQL日期时间数据类型
类型 | 大小 ( bytes) | 范围 | 格式 | "零"值 | 用途 |
---|---|---|---|---|---|
YEAR | 1 | 1901~2155 | YYYY | 0000 | 年份值 |
DATE | 3 | 1000-01-01~9999-12-31 | YYYY-MM-DD | '0000-00-00' | 日期值 |
TIME | 3 | '-838:59:59'~'838:59:59' | HH:MM:SS | '00:00:00' | 时间值或持续时间 |
TIMESTAMP | 4 | '1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYY-MM-DD hh:mm:ss | '0000-00-00 00:00:00' | 混合日期和时间值,时间戳 |
DATETIME | 8 | '1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' | YYYY-MM-DD hh:mm:ss | '0000-00-00 00:00:00' | 混合日期和时间值 |
MySQL 支持两类字符型数据:文本字符串和二进制字符串。二进制字符串类型有时候也直接被称为“二进制类型”。BIT数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB表。具体可阅读 MySQL二进制类型
类型名称 | 说明 | 范围 | 存储需求 |
---|---|---|---|
BIT(M) | 位字段类型 | M范围(1-64) | 大约 (M+7)/8 字节 |
BINARY(M) | 固定长度二进制字符串 | M范围(0-255) | M 字节 |
VARBINARY (M) | 可变长度二进制字符串 | M范围(0-65535) | M+1 字节 |
TINYBLOB (M) | 非常小的BLOB | 0-255 字节 | L+1 字节,在此,L<2^8 |
BLOB (M) | 小 BLOB | 0-65535 字节 | L+2 字节,在此,L<2^16 |
MEDIUMBLOB (M) | 中等大小的BLOB | 0-16777215 字节 | L+3 字节,在此,L<2^24 |
LONGBLOB (M) | 非常大的BLOB | 0-4 294 967 295 字节 | L+4 字节,在此,L<2^32 |
MySQL 具有与 OpenGIS 类相对应的空间数据类型。空间数据类型有GEOMETRY、POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。
某些空间数据类型保存单个几何值:
GEOMETRY
POINT
LINESTRING
POLYGON
GEOMETRY可以存储任何类型的几何值。其他单值类型(POINT、 LINESTRING和POLYGON)将其值限制为特定的几何类型。
其他空间数据类型保存值的集合:
MULTIPOINT
MULTILINESTRING
MULTIPOLYGON
GEOMETRYCOLLECTION