MySQL错误代码:1264超出第1行列'count'的范围值

时间:2010-11-19 11:53:57

标签: mysql underflow

我有一些MySQL代码:

CREATE TABLE test_table (  
    id int(11) NOT NULL AUTO_INCREMENT,  
    count int(10) unsigned DEFAULT NULL,  
    PRIMARY KEY (id)  
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

insert into test_table (count) values (1);
update test_table set count = IF( count -1 < 0, 0 , count -1 );
update test_table set count = IF( count -1 < 0, 0 , count -1 );

如果(count -1) < 0,则应将计数设置为零。

我收到错误:

Error Code: 1264 Out of range value for column 'count' at row 1` instead.

这是因为count是unsigned int。如果我使用signed int就行了。

这是MySQL中的错误吗?我正在使用:mysql Ver 14.14 Distrib 5.1.46sp1, for Win32 (ia32)

2 个答案:

答案 0 :(得分:5)

我认为你应该这样做:

UPDATE test_table
SET count = IF( count < 1, 0 , count -1 )

count - 1为零时,count的值会下溢。

SELECT count, count - 1 FROM test_table;
+-------+----------------------+
| count | count - 1            |
+-------+----------------------+
| 0     | 18446744073709551615 |
| 1     |                    0 |
| 2     |                    1 |
+-------+----------------------+

当我尝试你的查询时,它不起作用......但它不会像你看到的那样失败。

答案 1 :(得分:1)

如果count是无符号的,并且其值为零,则从中减去1会得到一个超出unsigned int范围的值。所以正确的错误信息并没有错误,我想