MySQL 的数据类型主要有数值类型、字符串类型和日期时间类型。
数值类型
数字类型又细分为多种类型,比如整数,单精度浮点数,双精度浮点数。整数按照长度,又可分文 tinyint
,bigint
等。具体如下表:
类型 | 大小(字节) | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
TINYINT | 1 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3 | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT/INTEGER | 4 | (-2147483648, 2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8 | (-2^63,2^63-1) | (0,2^64-1) | 极大整数 值 |
FLOAT | 4 | (-3.402823466 E+38, 3.402823466351 E+38) | 0 和 (1.175494351 E- 38,3.402823466 E+38) | 单精度浮 点数值 |
DOUBLE | 8 | (-1.7976931348623157 E+308, 1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308, 1.7976931348623157 E+308) | 双精度浮 点数值 |
DECIMAL | 依赖于M(精度)和D(标度) 的值 | 依赖于M(精度)和D(标度)的 值 | 小数 值(精 确定 点数) |
以 int
类型为例,int
类型占用4个字节,也就是32位,所以一个 int
类型的数字的取值范围就是是 -2^31~2^31-1 ,也就是 -2147483648 ~ 2147483647)。如果是无符号的 int
,会将负数范围分配到正数上,所以无符号 int 的范围大小 是0到4294967295 。
在表示人类年龄时,由于年龄不会有负数,因为使用 tinyint
类型(0~255)就很合适。
像 JavaScript,Java 等编程语言中会有布尔类型来表示真假,是否,但是 MySQL 中并没有布尔类型,可以使用 TINYINT(1)
来代表布尔类型,其中 1 表示 True,0表示False。
大部分时候,如果要表示整数类型,都会用 int
类型,表示浮点数类型,会使用 double
。
字符串类型
字符串类型是用到的最多的类型之一。
类型 | 大小(字节) | 描述 |
CHAR | 0-255 | 定长字符串,使用时需要指定长度 |
VARCHAR | 0-65535 | 变长字符串,使用时需要指定长度 |
TINYBLOB | 0-255 | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 | 短文本字符串 |
BLOB | 0-65535 | 二进制形式的长文本数据 |
TEXT | 0-65535 | 长文本数据 |
MEDIUMBLOB | 0-16777215 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16777215 | 中等长度文本数据 |
LONGBLOB | 0-4 294 96795 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967295 | 极大文本数据 |
使用最多的字符串类型是 CHAR
和 VARCHAR
。
CHAR
表示定长字符串,指定长度多长,就占用多少个字符,和字节无关。比如定义一个人的性别时,可以使用 CHAR(1)
,则该字段就只占用一个字符,可以用“男”或者“女”来存储性别。当设置“男性”时,两个字符超过限制,就会报错。当存储的字符串长度不够时,剩下的用空格填充,但是在查询时会丢弃。
VARCHAR
是变长字符串,指定的长度为字符的最长长度,比如存储密码时可以使用 VARCHAR(256)
,则密码字段的值最长有 256 个字符。当不够时,剩下的也不会用空格去填充。
虽然 BLOB
用于存储大二进制数据(大文件),但不会这么做,一般都是将大文件直接存储到磁盘上的,数据库中只保存文件的位置信息。
日期类型
类型 | 大小(字节) | 范围 | 格式 | 描述 |
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:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时 间值,时间戳 |
常用的日期类型主要是 DATE
、TIMESTAMP
、DATETIME
这三个。比如要定义生日字段,可以使用 DATE
类型,要记录一条数据的创建时间,可以使用 DATETIME
类型。
示例:创建用户表
了解了常用的数据类型后,就可以在使用 CREATE TABLE
建表时,要给表中的每个字段指定数据类型。比如要创建一张用户表:
create table user(
id int comment 'ID',
username varchar(10) comment '用户名',
password varchar(64) comment '密码',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
phone varchar(11) comment '手机号',
register_time date comment '注册时间'
) comment '用户表';
总结
本文介绍了 MySQL 中常用的三种数据类型:数值类型,字符串类型和日期时间类型。在实际使用时,要根据需要,选择一种最精确的类型,可以提高数据库的性能,优化存储空间。