TOC

MySQL 数据类型总结

数值

  • bit [1 - 64]

  • tinyint 1

  • smallint 2
  • mediumint 3
  • int 4
  • bigint 8

  • float 4 浮点(单精度)

  • double 8 浮点(双精度)
  • decimal(m, d) max(m, d) + 2 定点

别名 Synonyms:

  • integer -> int
  • bool / boolean -> tinyint(1)
  • dec / numeric / fixed -> decimal
  • double precision / real -> double

PS: 如果开启 REAL_AS_FLOAT 模式,REAL 就变成了 FLOAT 的别名。

字符串/文本

  • char
  • varchar

  • tinytext

  • text
  • mediumtext
  • longtext

  • JSON MySQL 5.7 加入

二进制

  • binary
  • varbinary

  • tinyblob

  • blob
  • mediumblob
  • longblob

时间

类型 长度 备注
year 1 四位数:1901 ~ 2155
两位数:00 ~ 69 (2000 ~ 2069) 70 ~ 99 (1970 ~ 1999)
date 3 1000-01-01 ~ 9999-12-31
time 3 -838:59:59.999999 ~ 838:59:59.999999
即:-34d23h ~ 34d23h
datetime 8 1000-01-01 00:00:00.000000 ~
9999-12-31 23:59:59.999999
timestamp 4 1970-01-01 00:00:00 ~
2038-01-19 11:14:07
  1. 用字符串(varchar)表示时间,除了失去数据库这一层的数据类型保证之外,还会在时间比较运算场景下,失去索引命中可能。
  2. 用整型数 bigint(8 字节)表示时间,可以扩大 timestamp 时间范围,但要自己维护数据(其实还是比较好维护的)。
  3. 带时区的时间:timestamp
  4. 带精度的时间:timedatetimetimestamp,精度最大为 6,表示毫秒。比如:timestamp(6)

其他

  • enum
  • set
  • Geometry 系列

货币

  1. 以分为单位 Integer
  2. Decimal,不要用 floatdouble

参考资料与拓展阅读