Description:
mysql> SELECT * FROM `a` WHERE updated >= '2010-04-20 12:00:00' AND updated < '2010-04-20 12:00:04'; /* Works */
+---------------------+---------------------+
| added | updated |
+---------------------+---------------------+
| 0000-00-00 00:00:00 | 2010-04-20 12:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM `a` WHERE updated >= '2010-04-20 12:00:00' AND updated <= '2010-04-20 12:00:04.0'; /* Works */
+---------------------+---------------------+
| added | updated |
+---------------------+---------------------+
| 0000-00-00 00:00:00 | 2010-04-20 12:00:00 |
+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM `a` WHERE updated >= '2010-04-20 12:00:00.0' AND updated <= '2010-04-20 12:00:04'; /* Fails */
Empty set (0.00 sec)
How to repeat:
DROP TABLE IF EXISTS `a`;
CREATE TABLE `a` (
`added` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
KEY `IDX_UPDATED` (`updated`)
) ENGINE=InnoDB;
INSERT INTO `a` VALUES ('0000-00-00 00:00:00','2010-04-20 12:00:00');
SELECT * FROM `a` WHERE updated >= '2010-04-20 12:00:00' AND updated < '2010-04-20 12:00:04'; /* Works */
SELECT * FROM `a` WHERE updated >= '2010-04-20 12:00:00' AND updated <= '2010-04-20 12:00:04.0'; /* Works */
SELECT * FROM `a` WHERE updated >= '2010-04-20 12:00:00.0' AND updated <= '2010-04-20 12:00:04'; /* Fails */
SELECT * FROM `a` WHERE updated >= ADDDATE('2010-04-20 12:00:00.0',0) AND updated <= '2010-04-20 12:00:04'; /* Workaround */