2

我有一些 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 是一个无符号整数。如果我使用带符号的 int 它可以工作。

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

4

2 回答 2

5

我认为你应该这样做:

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

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

选择计数,计数 - 1 FROM test_table;
+-------+----------+
| 计数 | 计数 - 1 |
+-------+----------+
| 0 | 18446744073709551615 |
| 1 | 0 |
| 2 | 1 |
+-------+----------+

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

于 2010-11-19T11:57:29.253 回答
1

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

于 2010-11-19T11:58:21.370 回答