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 */
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 */