MySQL(5.0.45)是否喜欢使用无符号数学进行奇怪的内部类型转换?我存储的是无符号整数,但是在选择基本算术时,我得到了令人震惊的数字:
mysql> create table tt ( a integer unsigned , b integer unsigned , c float );
Query OK, 0 rows affected (0.41 sec)
mysql> insert into tt values (215731,216774,1.58085);
Query OK, 1 row affected (0.00 sec)
mysql> select a,b,c from tt;
+--------+--------+---------+
| a | b | c |
+--------+--------+---------+
| 215731 | 216774 | 1.58085 |
+--------+--------+---------+
1 row in set (0.02 sec)
mysql> select (a-b)/c from tt;
+---------------------+
| (a-b)/c |
+---------------------+
| 1.1668876878652e+19 |
+---------------------+
1 row in set (0.00 sec)
mysql> -- WHAT?
mysql> select a-b from tt;
+----------------------+
| a-b |
+----------------------+
| 18446744073709550573 |
+----------------------+
1 row in set (0.02 sec)
我认为这与减法是负数这一事实有关,因此它试图将结果映射到无符号且溢出?显然,我可以通过将所有内容更改为有符号来解决这个问题,但我希望 32 位整数有更多的正空间。
我以前没有在 MySQL 上遇到过这个问题,而且我很确定我已经用无符号 MySQL 算术做了很多工作;这是个常见的问题吗?
如果减法运算符的左侧或右侧有一个无符号,则结果也无符号。您可以通过设置来更改此设置the NO_UNSIGNED_SUBTRACTIONSQL模式 http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_no_unsigned_subtraction.
或者,您也可以将无符号值显式转换为有符号 bigint 值,然后进行减法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)