所以我遇到了一个问题,要么我忘了一些基本的东西,要么我发现了一个错误。我把它缩小到了这个范围:
我的表:
CREATE TABLE `tbl` (
`id` int(11) NOT NULL,
`timestmp` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
简单。我的问题:
insert into tbl (id, timestmp) values (1, 1)
on duplicate key update timestmp = if(values(timestmp) > timestmp,
values(timestmp), timestmp)
表格将包含
(1, 1)
使用
重复查询values (1, 2)
表格将包含
(1, 2)
使用
重复查询values (1, 1)
表仍然包含
(1, 2)
大。正是我们想要的。而是使用此表:
CREATE TABLE `tbl` (
`id` int(11) NOT NULL,
`timestmp` bigint(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
让我们做同样的询问:
insert into tbl (id, timestmp) values (1, 1)
on duplicate key update timestmp = if(values(timestmp) > timestmp,
values(timestmp), timestmp)
表包含:
(1, 1)
查询:
values (1, 2)
表包含:
(1, 1)
什么?我们试试
values (1, -1)
表包含:
(1, -1)
JKLFSD !!!!!这是怎么回事?这应该发生吗?我完全误解了什么吗?我需要一个特殊的函数来进行bigint比较吗?