UNIX_TIMESTAMP()或FROM_UNIXTIME()函数中传递超出范围的值,MySQL将会返回什么?

UNIX_TIMESTAMP()或FROM_UNIXTIME()函数中传递超出范围的值,MySQL将会返回什么?

在MySQL中,UNIX_TIMESTAMP()和FROM_UNIXTIME()是常用的时间日期函数,它们可以将日期时间转换为UNIX时间戳或将UNIX时间戳转换为日期时间。

UNIX时间戳指的是距离1970年1月1日午夜0时(格林威治标准时间)的秒数。一般来说,这个数值的范围应该在-2147483648(1901年12月13日20时45分52秒)到2147483647(2038年1月19日3时14分7秒)之间。

但是如果在UNIX_TIMESTAMP()或FROM_UNIXTIME()中传递的参数值超出了这个范围,MySQL将会返回什么呢?我们来进行实验。

阅读更多:MySQL 教程

实验前的准备工作

为了能够进行实验,我们需要创建一张测试表,并插入一些数据。

CREATE TABLE test_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  datetime DATETIME
);

INSERT INTO test_table (datetime)
VALUES ('2021-01-01 12:34:56'), ('2039-01-01 12:34:56'), ('1899-01-01 12:34:56');

上述代码创建了一张test_table表,包含两列,分别是id和datetime。其中,datetime列包含三个日期时间值,分别是2021年1月1日12时34分56秒、2039年1月1日12时34分56秒、1899年1月1日12时34分56秒。

实验过程

我们先来使用UNIX_TIMESTAMP()函数将datetime列中的日期时间转换为UNIX时间戳。

SELECT id, datetime, UNIX_TIMESTAMP(datetime) AS unix_timestamp
FROM test_table;

执行上述代码后,我们可以看到如下结果:

id datetime unix_timestamp
1 2021-01-01 12:34:56 1609516496
2 2039-01-01 12:34:56 0
3 1899-01-01 12:34:56 -22089612504

上述结果中,第二行的unix_timestamp列返回了0,这是因为2039年1月1日12时34分56秒已经超出了UNIX时间戳的范围。

我们再来使用FROM_UNIXTIME()函数将UNIX时间戳转换为日期时间。

SELECT UNIX_TIMESTAMP(datetime), FROM_UNIXTIME(UNIX_TIMESTAMP(datetime)) AS datetime
FROM test_table;

执行上述代码后,我们可以看到如下结果:

UNIX_TIMESTAMP(datetime) datetime
1609516496 2021-01-01 12:34:56
0 1970-01-01 08:00:00
-22089612504 1900-01-01 08:31:36

上述结果中,第二行的datetime列返回了1970年1月1日8时整,这是因为0已经超出了UNIX时间戳的范围。

结论

根据上述实验结果,我们可以得出结论:当UNIX_TIMESTAMP()或FROM_UNIXTIME()函数中传递超出范围的值时,MySQL将会返回0或1970年1月1日8时整(即UNIX时间戳的最小值)。

因此,在使用UNIX_TIMESTAMP()或FROM_UNIXTIME()函数时,我们应该注意传递的参数值是否在合法范围内。同时,由于不同的数据库系统对于超出范围的值的处理可能有所不同,我们在跨平台应用开发中,也需要格外注意。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程