简单问题:
我有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。
为什么呢?有什么建议吗?
谢谢!
答案 0 :(得分:3)
我将假设您的两台服务器不运行相同的MySQL版本。
当您将时间戳传递给超出范围的0
时,MySQL会返回UNIX_TIMESTAMP()
。
MariaDB(某些Linux发行版当前使用的MySQL fork作为默认值)在相同的情况下返回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文档。
答案 1 :(得分:0)
错误处理
在MySQL和MariaDB 5.3之前,UNIX_TIMESTAMP()的错误参数返回0.从Maria_ 5.3开始,我们为UNIX_TIMESTAMP()的错误参数返回NULL。