gpt4 book ai didi

mysql 奇怪的情况与 unix_timestamp

转载 作者:行者123 更新时间:2023-12-02 00:06:30 27 4
gpt4 key购买 nike

简单问题:

我有 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() 时,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() 的 MySQL 文档和 a MariaDB-related article about this problem .

关于mysql 奇怪的情况与 unix_timestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com