在将年份视为4位数字值时,MySQL至少需要在字符串或数字中使用8位数字才能将其指定为日期值。在这种情况下,如果我们还想存储微秒,则该值最多可以为20位。
mysql> Select TIMESTAMP('20171022040536.100000'); +-----------------------------------+ | TIMESTAMP('20171022040536100000') | +-----------------------------------+ | 2017-10-22 04:05:36.100000 | +-----------------------------------+ 1 row in set, 1 warning (0.00 sec)
上面的查询使用TIMESTAMP值的20位数字字符串。后6位数字表示微秒。
mysql> Select TIMESTAMP(20171022); +---------------------+ | TIMESTAMP(20171022) | +---------------------+ | 2017-10-22 00:00:00 | +---------------------+ 1 row in set (0.00 sec)
上面的查询使用TIMESTAMP值的8位数字字符串。
mysql> Select TIMESTAMP(201710); +-------------------+ | TIMESTAMP(201710) | +-------------------+ | NULL | +-------------------+ 1 row in set, 1 warning (0.00 sec)
上面的查询返回NULL,因为一位数字小于8。
相反,当将年份视为2位数字值时,MySQL要求字符串或数字中至少6位数字才能将其指定为日期值。在这种情况下,如果我们还想存储微秒,则该值最多可以为18位。
mysql> Select TIMESTAMP(171022); +---------------------+ | TIMESTAMP(171022) | +---------------------+ | 2017-10-22 00:00:00 | +---------------------+ 1 row in set (0.00 sec)
上面的查询使用TIMESTAMP值的6位数字字符串。
mysql> Select TIMESTAMP('171022040536.200000'); +----------------------------------+ | TIMESTAMP('171022040536.200000') | +----------------------------------+ | 2017-10-22 04:05:36.200000 | +----------------------------------+ 1 row in set (0.00 sec)
上面的查询使用TIMESTAMP值的18位数字字符串。点(。)后的最后6位数字为微秒。
mysql> Select TIMESTAMP(1710); +-----------------+ | TIMESTAMP(1710) | +-----------------+ | NULL | +-----------------+ 1 row in set, 1 warning (0.00 sec)
上面的查询返回NULL,因为位数小于6。