类型 大小(字节) 有符号(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-65 535 二进制形式的长文本数据
TEXT 0-65 535 长文本数据
MEDIUMBLOB 0-16 777 215 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 中等长度文本数据
LONGBLOB 0-4 294 967 295 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 极大文本数据

使用最多的字符串类型是 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 中常用的三种数据类型:数值类型,字符串类型和日期时间类型。在实际使用时,要根据需要,选择一种最精确的类型,可以提高数据库的性能,优化存储空间。

  •