简单问题:

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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!