• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

mysql5 unsigned 相减出现补数 溢出 解决方法

mysql 搞代码 7年前 (2018-06-04) 191次浏览 已收录 0个评论

mysql5 unsigned 相减出现补数 溢出 解决办法

2010-08-17 17:36

在网上查询了下,大概都是下面这个文章,文章很不错,但是就是说注意 ,没有提出解决方法。现在我来补充下,下面先说下这个文章,然后给出答案

所有整数类型可以有一个可选(非标准)属性UNSIGNED。当你想要在列内只允许非负数和该列需要较大的上限数值范围时可以使用无符号值。
mysql4:
mysql> create table wubx(a TINYINT  unsigned not null default ‘0’); 
Query OK, 0 rows affected (0.04 sec)
mysql> select * from wubx;
Empty set (0.00 sec)
mysql> insert wubx values(0);
Query OK, 1 row affected (0.00 sec)
mysql> select * from wubx;  
+——+
| a    |
+——+
|    0 |
+——+
1 row in set (0.00 sec)
mysql> update wubx set a=a-1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1
mysql> select * from wubx;  
+——+
| a    |
+——+
|    0 |
+——+
1 row in set (0.00 sec)

mysql5:

(root@localhost) [test]> create table wubx(a int(11) unsigned not null default ‘0’); 
Query OK, 0 rows affected (18.44 sec)
(root@localhost) [test]> select  * from wubx; 
Empty set (0.00 sec)
(root@localhost) [test]> insert into wubx values(0);
Query OK, 1 row affected (0.00 sec)
(root@localhost) [test]> update wubx set a=a-1;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1
(root@localhost) [test]> select  * from wubx;      
+————+
| a          |
+————+
| 4294967295 |
+————+
1 row in set (0.00 sec)
mysql> show warnings;
+———+——+—————————————————–+
| Level   | Code | Message                                             |
+———+——+—————————————————–+
| Warning | 1264 | Out of range value adjusted for column ‘a’ at row 1 |
+———+——+—————————————————–+

查了一下:
在对于数值处理时:

MySQL4 会在不合规定的值插入表前自动修改为 0
Mysql5 为了速度,只存放数二进制数据,而且在加减运算中,也是二进制的运算.

所以在使用unsigned 是小心0-1 的操作.尽量在这类操作前先做一个判断.

如果直接在程序里进行判定,难免会出现数据错误,因为有一点点时间内数据是放在内存的,而没放进库里,最好的办法还是直接送出sql语句进行修改,这里mysql5有解决办法 CONVERT( 字段 + (要加减的数字) AS SIGNED )就可以了。

例如:UPDATE `user` SET `tk` = CONVERT( tk +  (-8)  AS SIGNED ) WHERE `id` = ‘1330’


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:mysql5 unsigned 相减出现补数 溢出 解决方法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址