MySQL 的数据类型主要有数值类型、字符串类型和日期时间类型。

数值类型

数字类型又细分为多种类型,比如整数,单精度浮点数,双精度浮点数。整数按照长度,又可分文 tinyintbigint 等。具体如下表:

类型

大小(字节)

有符号(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

极大文本数据

使用最多的字符串类型是 CHARVARCHAR

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

混合日期和时 间值,时间戳

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