百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> mysql中unsigned类型字段出现65535错误
分享文章到:

mysql中unsigned类型字段出现65535错误

发布时间:01/15 来源: 浏览: 关键词:
这里是使用了unsigned 的 smallint 字段类型在更新时提示 65535错误了,这个意思是长度在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的问题

补充:unsigned相关字段长度

unsigned 既为非负数,用此类型可以增加数据长度! 
例如如果 tinyint最大是127,那 tinyint unsigned 最大 就可以到 127 * 2 
unsigned 属性只针对整型,而binary属性只用于char 和varchar。

类型
说明
tinyint
非常小整数
smallint
较小整数
mediumint
中等大小整数
int
标准整数
bigint
较大整数
float
单精度浮点数
double
双精度浮点数
decimal
一个串浮点数


每种数值类型名称和取值范围如表2所示。
类型说明
取值范围
tinyint[(m)]
有符号值:-128 到127(- 27 到27 - 1)
无符号值:0到255(0 到28 - 1) 1个字节
smallint[(m)]
有符号值:-32768 到32767(- 215 到215 - 1)
无符号值:0到65535(0 到21 6 - 1) 2个字节
mediumint[(m)]
有符号值:-8388608 到8388607(- 22 3 到22 3 - 1 )
无符号值:0到16777215(0 到22 4 - 1) 3个字节
int[(m)]
有符号值:-2147683648 到2147683647(- 231 到231- 1)
无符号值:0到4294967295(0 到232 - 1) 4个字节
bigint[(m)]
有符号值:-9223372036854775808 到9223373036854775807(- 263到263-1)
无符号值:0到18446744073709551615(0到264 – 1) 8个字节
float[(m, d)]
最小非零值:±1.175494351e - 38
double[(m,d)]
最小非零值:±2.2250738585072014e - 308
decimal (m, d)
可变;其值范围依赖于m 和d
表2:数值列类型取值范围
各种类型值所需存储量如表3所示。
类型说明
存储需求
tinyint[(m)]
1字节
smallint[(m)]
2字节
mediumint[(m)]
3字节
int[(m)]
4字节
bigint[(m)]
8字节
float[(m, d)]
4字节
double[(m, d)]
8字节
decimal (m, d)
m字节(mysql < 3.23),m+2字节(mysql > 3.23 )
打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有8人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板