mysql使用unix\u时间戳的奇怪情况
简单问题: 我有2台Mysql服务器,我在这两个服务器中运行此查询:mysql使用unix\u时间戳的奇怪情况,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') | +---------------
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\u timestamp()
时,MySQL返回0
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位整数,这给了我们几十万年的额外时间。)
请参阅MySQL文档以了解和。错误处理
在MySQL和MariaDB 5.3之前版本中,UNIX_TIMESTAMP()的错误参数返回0。从MARIADB 5.3开始,对于UNIX_TIMESTAMP()的错误参数,我们将返回NULL。感谢您的回答,但不,我使用的不是相同的版本。。。我认为问题在于版本。两台服务器中是否有一台运行sql模式设置?(您可以发布两台服务器的sql模式设置。使用
SELECT@@global.sql\u mode;
检索该设置)