Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL对-1的强制转换返回18446744073709551615_Mysql_Casting - Fatal编程技术网

MySQL对-1的强制转换返回18446744073709551615

MySQL对-1的强制转换返回18446744073709551615,mysql,casting,Mysql,Casting,我似乎找不到对此的解释,而且我很确定它以前是按预期工作的 SELECT CAST(-1 AS UNSIGNED INTEGER); 预期值:0 结果:18446744073709551615 有什么变化吗,或者这是MySQL错误 [更新] 好的,我想我找到了一个原因,为什么它以前似乎有效: SELECT CAST(-1.0 AS UNSIGNED INTEGER); +--------------------------------+ | CAST(-1.0 AS UNSIGNED INTEG

我似乎找不到对此的解释,而且我很确定它以前是按预期工作的

SELECT CAST(-1 AS UNSIGNED INTEGER);
预期值:0
结果:18446744073709551615

有什么变化吗,或者这是MySQL错误

[更新] 好的,我想我找到了一个原因,为什么它以前似乎有效:

SELECT CAST(-1.0 AS UNSIGNED INTEGER);
+--------------------------------+
| CAST(-1.0 AS UNSIGNED INTEGER) |
+--------------------------------+
|                              0 |
+--------------------------------+
现在,有人能解释一下这造成的区别吗?。。事实上,我在文件里找到了

如果任一操作数是浮点值,则结果为 浮点值,不受上述规则的影响

从:

MySQL支持有符号和无符号64位值的算术运算。如果您使用的是数字运算符(如+或-),且其中一个操作数是无符号整数,则默认情况下,结果是无符号的(请参阅第11.6.1节“算术运算符”)。您可以通过使用有符号或无符号强制转换运算符将值分别强制转换为有符号或无符号64位整数来重写此操作

mysql> SELECT CAST(1-2 AS UNSIGNED)
       -> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
       -> -1

基本上,通过您的cast,您可以告诉
MySQL
如何处理
0xffffffffffff
。签名时为
-1
,未签名时为
18446744073709551615

18446744073709551615
正好是2^64-1。我不希望有任何其他输出。&阿尔瓦罗·G·维卡里奥:感谢您的解释
SELECT CAST(-1.0为无符号INT)
给出警告(在出现警告之前运行
warnings
):“错误(代码1292):截断了不正确的十进制值:“””。@Lekensteyn:感谢您指出警告,尽管警告有点混乱,因为手册中指出:“在此上下文中,十进制列值被视为浮点值。”