问题描述
在调试应用程序中的错误选择时,我们偶然发现了mariadb10.3.22和mariadb10.1中一个奇怪的行为。
以下查询失败:
SELECT UNIX_TIMESTAMP() - 9999999999999999999; // 19 digits
错误1690(22003):BIGINT UNSIGNED值超出了'unix_timestamp()-9999999999999999999'中的范围
但是,增加或减少次偷偷摸摸的工作:
MariaDB [(none)]> SELECT UNIX_TIMESTAMP() - 99999999999999999999; // 20 digits
+-----------------------------------------+
| UNIX_TIMESTAMP() - 99999999999999999999 |
+-----------------------------------------+
| -99999999998396888357 |
+-----------------------------------------+
MariaDB [(none)]> SELECT UNIX_TIMESTAMP() - 999999999999999999; // 18 digits
+---------------------------------------+
| UNIX_TIMESTAMP() - 999999999999999999 |
+---------------------------------------+
| -999999998396888251 |
+---------------------------------------+
更改次要符号也可以:
SELECT UNIX_TIMESTAMP() + -9999999999999999999; // 19 digits
+-----------------------------------------+
| UNIX_TIMESTAMP() + -9999999999999999999 |
+-----------------------------------------+
| -9999999998396886079 |
+-----------------------------------------+
我还尝试在sql_mode中设置NO_UNSIGNED_SUBTRACTION,但这也不起作用。
有人可以解释这个行为吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)