【问题标题】:mysql strange situation with unix_timestampmysql的unix_timestamp的奇怪情况
【发布时间】:2013-08-08 22:10:48
【问题描述】:

简单的问题:

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


    【解决方案1】:

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

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

    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 位整数代替,给我们额外的数十万年。)

    请参阅UNIX_TIMESTAMP()a MariaDB-related article about this problem 的 MySQL 文档。

    【讨论】:

    • 谢谢你的回答,但是不,我没有使用相同的版本...我认为问题是版本..
    • 两台服务器中的一台是否以 sql 模式设置 NO_ZERO_DATE 运行? (您可以发布两个服务器的sql模式设置。使用SELECT @@global.sql_mode;检索它。)
    【解决方案2】:

    错误处理

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

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      相关资源
      最近更新 更多