Select mariadb中的奇怪行为:BIGINT未签名超出范围

Select mariadb中的奇怪行为:BIGINT未签名超出范围,select,mariadb,bigint,Select,Mariadb,Bigint,在调试应用程序中的错误select时,我们在mariadb10.3.22和mariadb10.1中偶然发现了一个奇怪的行为 以下查询失败: SELECT UNIX_TIMESTAMP() - 9999999999999999999; // 19 digits 错误1690(22003):BIGINT无符号值超出“unix_timestamp()-999999999999”中的范围 但是,增加或减少底端工程: MariaDB [(none)]> SELECT UNIX_TIMESTAMP(

在调试应用程序中的错误select时,我们在mariadb10.3.22和mariadb10.1中偶然发现了一个奇怪的行为

以下查询失败:

SELECT UNIX_TIMESTAMP() - 9999999999999999999; // 19 digits
错误1690(22003):BIGINT无符号值超出“unix_timestamp()-999999999999”中的范围

但是,增加或减少底端工程:

MariaDB [(none)]> SELECT UNIX_TIMESTAMP() - 99999999999999999999; // 20 digits

+-----------------------------------------+
| UNIX_TIMESTAMP() - 99999999999999999999 |
+-----------------------------------------+
|                   -99999999998396888357 |
+-----------------------------------------+
更改减数符的符号也有效:

SELECT UNIX_TIMESTAMP() + -9999999999999999999; // 19 digits

+-----------------------------------------+
| UNIX_TIMESTAMP() + -9999999999999999999 |
+-----------------------------------------+
|                    -9999999998396886079 |
+-----------------------------------------+
我还尝试在sql模式下设置无符号减法,但也不起作用


有人能解释一下这种行为吗?

我想报告一个bug。谢谢@marc\s的编辑!
SELECT UNIX_TIMESTAMP() + -9999999999999999999; // 19 digits

+-----------------------------------------+
| UNIX_TIMESTAMP() + -9999999999999999999 |
+-----------------------------------------+
|                    -9999999998396886079 |
+-----------------------------------------+