1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > mysql修改字段类型为smallint_mysql更新 unsigned 的 smallint 类型字段出现65535

mysql修改字段类型为smallint_mysql更新 unsigned 的 smallint 类型字段出现65535

时间:2024-02-29 01:30:34

相关推荐

mysql修改字段类型为smallint_mysql更新 unsigned 的 smallint 类型字段出现65535

$sql = "UPDATE `dzxbbs_common_member` SET newprompt=newprompt-1 WHERE uid='{$uid}'";

`dzxbbs_common_member` 表中 newprompt的类型是 smallint unsigned 长度为6的类型。

当newprompt值为0时,执行这条sql语句,得到了意想不到的结果newprompt字段值变成了65535。

出现这个问题的服务器版本是 mysql 5.1.38-log。

解决这个需要设置这个参数 sql_mode="NO_UNSIGNED_SUBTRACTION" 启用这个选项后两个UNSIGNED类型相减返回SIGNED类型。

我在本地测试的结果是报错

#1690 – BIGINT UNSIGNED value is out of range in '(`test`.`test`.`view` – 1)'

服务器版本: mysql 5.5.16

开源电商系统ecshop商品库存也存在突然变成65535的问题。

Mysql5 为了速度,只存放数二进制数据,而且在加减运算中,也是二进制的运算.

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

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

例如:UPDATE `user` SET `tk` = CONVERT( tk + (-8) ,SIGNED ) WHERE `id` = '133'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。