MySQL · 数据类型

数据类型

数值类型

类型 大小 范围(有符号) 范围(无符号)
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 字节 -2^63 ~ 2^63-1 0 ~ 18446744073709551615
FLOAT 4 字节
DOUBLE 8 字节
DECIMAL[(M,D)] M+2/D+2 M:总位数,D:小数点位数 依赖 M 和 D 的值

字符串类型

类型 存储范围 用途
CHAR(M) M 字节,其中 M 为 0 ~ 255 定长字符串
VARCHAR(M) L + 1 字节,0 ~ 255 变长字符串
TINYTEXT
TEXT L + 2 字节,0 ~ 65535 文章等文本数据
MIUDMTEXT
LONGTEXT
BLOB 0 ~ 65535 图片等二进制形式数据
MIUDMBLOB
LONGBLOB
ENUM(‘val’,’val’) 1 或 2 字节,取决于枚举的个数
SET(‘val’,’val’,’val’) 1, 2, 3, 4, 8 字节,取决于成员的数目

时间类型

类型 大小 范围 格式 用途
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 YYYY-MM-DD HH:MM:SS 日期和时间值
TIMESTAMP 4 字节 1970-01-01 00:00:00/2038 YYYYMMDD HHMMSS 日期和时间值

选择

原则

  • 选择合理范围内最小的,这样可以大大减少磁盘空间及磁盘 I/0 读写开销,减少内存占用,减少 CPU 占用率。
  • 选择相对简单的数据类型,数字类型相对字符串类型要简单的多。
  • 尽量避免 NULL,这是因为 MySQL 对 NULL 字段索引优化不佳,解决方法是数值弄用整数 0,字符串用空来定义默认值即可。

示例

  • 手机号:char(11)
  • 姓名:char(20)
  • 价格:decimal(7, 3)
  • 产品序列号:smallint(5) unsigned
  • 文章内容: text
  • MD5: char(32)
  • IP: char(15)
  • Email:char(32)
  • 性别:enum(‘男’,’女’)
  • 布尔值:tinyint(1)