【问题标题】:Mysql Error 1690mysql错误1690
【发布时间】:2014-02-24 15:53:43
【问题描述】:

错误信息调试:

vBulletin 4.2.1 中的数据库错误:

无效的 SQL:

UPDATE user
SET post_thanks_thanked_times = post_thanks_thanked_times - 5,
    post_thanks_thanked_posts = post_thanks_thanked_posts - 1
WHERE userid = '3658';
MySQL 错误:BIGINT UNSIGNED 值超出范围 '(`forumsDb`.`user`.`post_thanks_thanked_times` - 5)' 错误号:1690 申请日期:2014 年 2 月 24 日星期一上午 07:32:09 错误日期:2014 年 2 月 24 日星期一 @ 07:32:10 AM 脚本:http://domain.com/admincp/forum.php?do=kill 推荐人:http://domain.com/admincp/forum.php?do=remove&f=5&s= 类名:vB_Database MySQL 版本:5.5.35-cll

我该如何解决这个问题?

谢谢

【问题讨论】:

  • post_thanks_thanked_times的当前值是否小于5?
  • 请参阅此处查看SQL Integer Types。尝试使用BIGINT SIGNED,以防post_thanks_thanked_posts 为负数。

标签: mysql


【解决方案1】:

您必须将您的值(转换)转换为正确的类型:

UPDATE user
SET post_thanks_thanked_times = CAST(post_thanks_thanked_times AS UNSIGNED) - 5,
    post_thanks_thanked_posts = CAST(post_thanks_thanked_posts AS UNSIGNED) - 1
WHERE userid = '3658';

同一条消息可能导致更多原因,请查看帖子中的答案 BIGINT UNSIGNED VALUE IS out of range My SQL

【讨论】:

  • 当我使用 SELECT CAST(post_thanks_thanked_times AS UNSIGNED) + 1;我看到错误消息:#1054 - '字段列表'中的未知列 'post_thanks_thanked_times' 但我有这个列!
  • 新命令错误:#1690 - BIGINT UNSIGNED 值超出 '(cast(sat0f_F0RuMs.user.post_thanks_thanked_times as unsigned) - 5)'的范围
  • user 是一个很笼统的表名,你能不能把你的表改成别的名字,这应该和系统保留字冲突...
  • 另一点是,似乎一旦你用减号更新,你的值就会变成负数,这将是另一个原因,在这种情况下尝试将字段类型从 bigint 更改为 DECIMAL( 10,2)
  • 我用过 SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';然后用那个cmd,问题就解决了。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-11-05
  • 2014-10-20
  • 2015-04-25
  • 2018-07-03
  • 2019-11-29
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多