Random walk to my blog

my blog for sharing my knowledge,experience and viewpoint

0%

MySQL的 `BIGINT` vs. `INT`,`DATETIME` vs. `TIMESTAMP`

BIGINT vs. INT

作为主键,使用INT

当定义表的主键时,有2种选择

  1. BIGINT AUTO_INCREMENT
  2. INT UNSIGNED AUTO_INCREMENT
    一般来说,BIGINTINT都可以作为表的主键,BIGINT是8个字节,INT是4个字节。在这里,建议使用INT,因为能够支撑43亿的数据量,对于很多应用,这是个足够的数据。

表示时间

INT UNSIGNED的最大值是4294967295 (0xffffffff).转化成时间是2106年2月7日星期日下午2点28分 GMT+08:00.
INT的最大值是2147483647, 转化成时间是2038年1月19日星期二上午11点14分 GMT+08:00.
BIGINT的最大值是9223372036854775807, 转化成时间是2262年4月12日星期六早上7点47分 GMT+08:00.
BIGINT UNSIGNED的最大值是18446744073709551615, 转化成时间是2554年7月22日星期一早上7点34分 GMT+08:00.
因此,根据数据的范围,来选择对应的类型。

DATETIME vs. TIMESTAMP

DATETIME的大小是8字节,TIMESTAMP的大小是4字节。

  1. TIMESTAMP表示的是1970年1月1号的时间,它的范围是从’1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC.
  2. DATETIMEYYYY-MM-DD hh:mm:ss的格式保存,它的范围是从’1000-01-01 00:00:00’到 ‘9999-12-31 23:59:59’
  3. 从MySQL 5起,TIMESTAMP保存的时候,是以当前的时区来保存。检索的时候会转化到对应的时区。