3

简单的问题:

我有 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。

为什么?有什么建议么?

谢谢!

4

2 回答 2

3

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

0当您将时间戳传递给UNIX_TIMESTAMP()超出范围时, MySQL 会返回。

MariaDB(一些 Linux 发行版当前默认使用的 MySQL 分支)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 文档UNIX_TIMESTAMP()有关此问题的 MariaDB 相关文章

于 2013-08-08T22:24:21.387 回答
0

错误处理

在 MySQL 和 MariaDB 5.3 之前,UNIX_TIMESTAMP() 的错误参数返回 0。从 MariaDB 5.3 开始,我们为 UNIX_TIMESTAMP() 的错误参数返回 NULL。

于 2013-08-08T22:29:09.343 回答