update user set money=money-0.01 where uName='701'当数据库的money的值为0.01时 无法执行 提示错误如下:
 Out of range value adjusted for column 'money' at row 1当数据库的money的值为6.01时 执行下例语句就成功
update user set money=money-6.01 where uName='701'money 字段是float类型 长度为10,保留2位小数,默认0.00;请高手解答!

解决方案 »

  1.   

    奇怪,在我的电脑上怎么没有这个问题?
    请问楼主用的是什么版本的mysql?
      

  2.   

    没有出现你所说的问题。建议你能详细描述你的错误产生步骤,否则别人很难模拟再现你的问题。mysql> desc t_a175460677;
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | uName | char(3)     | YES  |     | NULL    |       |
    | money | float(10,2) | YES  |     | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    2 rows in set (0.06 sec)mysql>
    mysql> select * from t_a175460677;
    +-------+-------+
    | uName | money |
    +-------+-------+
    | 701   |  0.01 |
    | 701   |  6.01 |
    +-------+-------+
    2 rows in set (0.06 sec)mysql> update t_a175460677 set money=money-0.01 where uName='701';
    Query OK, 2 rows affected (0.06 sec)
    Rows matched: 2  Changed: 2  Warnings: 0mysql> select * from t_a175460677;
    +-------+-------+
    | uName | money |
    +-------+-------+
    | 701   |  0.00 |
    | 701   |  6.00 |
    +-------+-------+
    2 rows in set (0.00 sec)mysql>
      

  3.   


    我用的是 MySQL 5.0.45(CentOS 5.2 x86_64) , 试了字段类型:  FLOAT, FLOAT(10,2), FLOAT(8,2) , 都没有问题.
      

  4.   

    我的MYSQL 版本是 5.5.24-0ubuntu0.12.04.1 (Ubuntu)也遇到上面的问题了。UPDATE points SET money=money-0.2 WHERE uid=422;
    受影响的行: 0money=money-1
    受影响的行: 1
      

  5.   

    修改表结构,将 float 改为 double就可以了。