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') |
+---------------------------------------+
|                                  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/

相关文章:

MySQL - 记录具有多个条件的查询锁

mysql - 在别名连接字段中使用 WHERE 会出现 'unknown column' 错误

r - 将数字(integer64 类)UNIX 时间戳转换为日期时间类

mysql - 关于时间戳(MYSQL)的问题

mysql - 将 MySQL 日期四舍五入到最近的间隔,而不受夏令时变化的影响

laravel - 将日期从引导日期选择器转换为不同格式时出现问题

mysql - SQL 选择在列中找到匹配值的位置

php - GROUP_CONCAT 多列作为数组或可分解字符串

mysql - 如何在 MAMP 中使用 phpMyAdmin 在 MySQL 中显示关系 View

python - 使用 Unix 时间戳创建重复日期列表会导致额外条目