mysql使用unix\u时间戳的奇怪情况

mysql使用unix\u时间戳的奇怪情况,mysql,unix-timestamp,Mysql,Unix Timestamp,简单问题: 我有2台Mysql服务器,我在这两个服务器中运行此查询: select unix_timestamp('0000-00-00 00:00:00'); 结果: 在服务器1上: mysql> select unix_timestamp('0000-00-00 00:00:00'); +---------------------------------------+ | unix_timestamp('0000-00-00 00:00:00') | +---------------

简单问题:

我有2台Mysql服务器,我在这两个服务器中运行此查询:

select unix_timestamp('0000-00-00 00:00:00');
结果:

在服务器1上:

mysql> select unix_timestamp('0000-00-00 00:00:00');
+---------------------------------------+
| unix_timestamp('0000-00-00 00:00:00') |
+---------------------------------------+
|                                  NULL |
+---------------------------------------+
在服务器2上:

mysql> select unix_timestamp('0000-00-00 00:00:00');
+---------------------------------------+
| unix_timestamp('0000-00-00 00:00:00') |
+---------------------------------------+
|                                     0 |
+---------------------------------------+
在这两种情况下我都需要0

为什么??有什么建议吗


谢谢

我将假设您的两台服务器运行的MySQL版本不同

当您将超出范围的时间戳传递给
UNIX\u timestamp()
时,MySQL返回
0

MariaDB(一些Linux发行版当前使用的默认MySQL fork)在相同的情况下返回
NULL

如果时间戳在1970-01-01 00:00:00之前或2038-01-19 03:14:08之后,则时间戳超出UNIX时间的范围。这是因为它存储为32位无符号整数。1970-01-01 00:00:00是
0
,因为它没有签名,所以在此之前不能表示任何内容。在2038-01-19 03:14:08,整数将达到其最大值,之后的任何内容也不能表示为UNIX时间戳。(在某些系统上已经存在的一种解决方案是使用64位整数,这给了我们几十万年的额外时间。)

请参阅MySQL文档以了解和。

错误处理


在MySQL和MariaDB 5.3之前版本中,UNIX_TIMESTAMP()的错误参数返回0。从MARIADB 5.3开始,对于UNIX_TIMESTAMP()的错误参数,我们将返回NULL。

感谢您的回答,但不,我使用的不是相同的版本。。。我认为问题在于版本。两台服务器中是否有一台运行sql模式设置?(您可以发布两台服务器的sql模式设置。使用
SELECT@@global.sql\u mode;
检索该设置)