Bug #21103 | DATE column not compared as DATE | ||
---|---|---|---|
Submitted: | 18 Jul 2006 1:32 | Modified: | 4 Jun 2007 18:38 |
Reporter: | Travers Carter | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.0.21, 5.1.15-BK | OS: | Linux (Linux) |
Assigned to: | Tatiana Azundris Nuernberg | CPU Architecture: | Any |
[18 Jul 2006 1:32]
Travers Carter
[18 Jul 2006 6:34]
Hartmut Holzgraefe
Looks like a conversion bug as "val <= NOW()" returns 1, so in this comparison both values seem to be treated as DATE values, with NOW() being converted from DATETIME to DATE whereas in "CAST(Val AS DATE) < NOW()" the CAST result is further converted to a DATETIME I'm not sure whether these differences in type conversion are really expected behavior so i'm setting this to "verified" for now
[9 Nov 2006 0:47]
MySQL Verification Team
Here's another example where the automatic type conversion isn't behaving as expected for DATE; mysql> create table test (field DATE); Query OK, 0 rows affected (0.15 sec) mysql> insert into test values ('2006-11-06'); Query OK, 1 row affected (0.02 sec) mysql> select * from test where field < '2006-11-06 04:08:36.0'; Empty set (0.00 sec) # mysql> select * from test where CAST(field as DATE) < '2006-11-06 04:08:36.0'; +------------+ | field | +------------+ | 2006-11-06 | +------------+ 1 row in set (0.00 sec)
[11 Dec 2006 22:30]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/16803 ChangeSet@1.2348, 2006-12-11 23:31:34+01:00, tnurnberg@mysql.com +9 -0 Bug #21103: DATE column not compared as DATE If we compare two items A and B, with B being (a constant) of a larger type, then A gets promoted to B's type for comparison if it's a constant, function, or CAST() column, but B gets demoted to A's type if A is a (not explicitly CAST()) column. This is counter-intuitive and not mandated by the standard. Disabling optimisation where it would be lossy so field value will properly get promoted and compared as binary string (rather than as integers).
[3 Feb 2007 9:08]
Valeriy Kravchuk
This should be fixed in 5.1 also. In 5.1.15-BK we still have: openxs@suse:~/dbs/5.1> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.15-beta Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> drop table test; Query OK, 0 rows affected (0.00 sec) mysql> create table test (field DATE); Query OK, 0 rows affected (0.02 sec) mysql> insert into test values ('2006-11-06'); Query OK, 1 row affected (0.00 sec) mysql> select * from test where field < '2006-11-06 04:08:36.0'; Empty set (0.00 sec) mysql> select * from test where CAST(field as DATE) < '2006-11-06 04:08:36.0'; +------------+ | field | +------------+ | 2006-11-06 | +------------+ 1 row in set (0.01 sec)
[2 Mar 2007 14:24]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/21025 ChangeSet@1.2457, 2007-03-02 15:23:13+01:00, tnurnberg@mysql.com +9 -0 Bug #21103: DATE column not compared as DATE If we compare two items A and B, with B being (a constant) of a larger type, then A gets promoted to B's type for comparison if it's a constant, function, or CAST() column, but B gets demoted to A's type if A is a (not explicitly CAST()) column. This is counter-intuitive and not mandated by the standard. Disabling optimisation where it would be lossy so field value will properly get promoted and compared as binary string (rather than as integers).
[5 Mar 2007 10:46]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/21137 ChangeSet@1.2462, 2007-03-05 11:13:39+01:00, tnurnberg@mysql.com +1 -0 Bug#21103: DATE column not compared as DATE When comparing a DATE field with a DATETIME constant, we now compare as DATETIMEs, not as DATEs. Fix BDB queries to still work.
[5 Mar 2007 12:44]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/21141 ChangeSet@1.2396, 2007-03-05 13:21:35+01:00, tnurnberg@mysql.com +1 -0 Bug#21103: DATE column not compared as DATE When comparing a DATE field with a DATETIME constant, we now compare as DATETIMEs, not as DATEs. Fix BDB queries to still work.
[5 Mar 2007 13:03]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/21143 ChangeSet@1.2458, 2007-03-05 14:02:29+01:00, tnurnberg@mysql.com +1 -0 Bug#21103: DATE column not compared as DATE When comparing a DATE field with a DATETIME constant, we now compare as DATETIMEs, not as DATEs. Fix BDB queries to still work.
[8 Mar 2007 22:12]
Timothy Smith
pushed to 5.0.38, 5.1.17
[16 Mar 2007 16:48]
Paul DuBois
Noted in 5.0.38, 5.1.17 changelogs. CURDATE() is less than NOW(), either when comparing CURDATE() directly (CURDATE() < NOW() is true) or when casting CURDATE() to DATE (CAST(CURDATE() AS DATE) < NOW() is true). However, storing CURDATE() in a DATE column and comparing col_name < NOW() incorrectly yielded false. This is fixed by comparing a DATE column as DATETIME for comparisons to a DATETIME constant.
[23 Mar 2007 20:07]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/22832 ChangeSet@1.2504, 2007-03-23 22:08:31+02:00, monty@mysql.com +44 -0 Removed not used define YY_MAGIC_BELOW Made year 2000 handling more uniform Removed year 2000 handling out from calc_days() The above removes some bugs in date/datetimes with year between 0 and 200 Now we get a note when we insert a datetime value into a date column For default values to CREATE, don't give errors for warning level NOTE Fixed some compiler failures Added library ws2_32 for windows compilation (needed if we want to compile with IOCP support) Removed duplicate typedef TIME and replaced it with MYSQL_TIME Better (more complete) fix for: Bug#21103 "DATE column not compared as DATE" Fixed properly Bug#18997 "DATE_ADD and DATE_SUB perform year2K autoconversion magic on 4-digit year value" Fixed Bug#23093 "Implicit conversion of 9912101 to date does not match cast(9912101 as date)"
[10 Apr 2007 15:40]
Tatiana Azundris Nuernberg
queued in 5.0.40-marvel 5.1.17-marvel
[18 Apr 2007 15:46]
Bugs System
Pushed into 5.1.18-beta
[24 Apr 2007 1:24]
Paul DuBois
Moved the 5.1.17 changelog to 5.1.18. Setting report to Patch Queued pending merge into 5.0.x.
[14 May 2007 9:29]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26579 ChangeSet@1.2478, 2007-05-14 11:28:59+02:00, tnurnberg@blasphemy.mysql.com +37 -0 Backport of TIME->MYSQL_TIME / Y2K fixset Made year 2000 handling more uniform Removed year 2000 handling out from calc_days() The above removes some bugs in date/datetimes with year between 0 and 200 Now we get a note when we insert a datetime value into a date column For default values to CREATE, don't give errors for warning level NOTE Fixed some compiler failures Added library ws2_32 for windows compilation (needed if we want to compile with IOCP support) Removed duplicate typedef TIME and replaced it with MYSQL_TIME Better (more complete) fix for: Bug#21103 "DATE column not compared as DATE" Fixed properly Bug#18997 "DATE_ADD and DATE_SUB perform year2K autoconversion magic on 4-digit year value" Fixed Bug#23093 "Implicit conversion of 9912101 to date does not match cast(9912101 as date)"
[14 May 2007 11:03]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26584 ChangeSet@1.2478, 2007-05-14 13:02:47+02:00, tnurnberg@blasphemy.mysql.com +38 -0 Backport of TIME->MYSQL_TIME / Y2K fixset Made year 2000 handling more uniform Removed year 2000 handling out from calc_days() The above removes some bugs in date/datetimes with year between 0 and 200 Now we get a note when we insert a datetime value into a date column For default values to CREATE, don't give errors for warning level NOTE Fixed some compiler failures Added library ws2_32 for windows compilation (needed if we want to compile with IOCP support) Removed duplicate typedef TIME and replaced it with MYSQL_TIME Better (more complete) fix for: Bug#21103 "DATE column not compared as DATE" Fixed properly Bug#18997 "DATE_ADD and DATE_SUB perform year2K autoconversion magic on 4-digit year value" Fixed Bug#23093 "Implicit conversion of 9912101 to date does not match cast(9912101 as date)"
[14 May 2007 12:53]
Tatiana Azundris Nuernberg
pushed to 5.0.42-maint
[14 May 2007 15:44]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26622 ChangeSet@1.2480, 2007-05-14 17:44:36+02:00, tnurnberg@blasphemy.mysql.com +1 -0 Bug#21103: "DATE column not compared as DATE" BDB results fixed (not p/o 5.1 fix)
[16 May 2007 8:45]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26781 ChangeSet@1.2481, 2007-05-16 10:44:59+02:00, msvensson@pilot.blaudden +38 -0 Backport of TIME->MYSQL_TIME / Y2K fixset Made year 2000 handling more uniform Removed year 2000 handling out from calc_days() The above removes some bugs in date/datetimes with year between 0 and 200 Now we get a note when we insert a datetime value into a date column For default values to CREATE, don't give errors for warning level NOTE Fixed some compiler failures Added library ws2_32 for windows compilation (needed if we want to compile with IOCP support) Removed duplicate typedef TIME and replaced it with MYSQL_TIME Better (more complete) fix for: Bug#21103 "DATE column not compared as DATE" Fixed properly Bug#18997 "DATE_ADD and DATE_SUB perform year2K autoconversion magic on 4-digit year value" Fixed Bug#23093 "Implicit conversion of 9912101 to date does not match cast(9912101 as date)"
[16 May 2007 12:00]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/26820 ChangeSet@1.2483, 2007-05-16 14:00:47+02:00, msvensson@pilot.blaudden +1 -0 Bug#21103: "DATE column not compared as DATE" BDB results fixed (not p/o 5.1 fix)
[22 May 2007 17:00]
Bugs System
Pushed into 5.1.19-beta
[22 May 2007 17:02]
Bugs System
Pushed into 5.0.44
[4 Jun 2007 18:38]
Paul DuBois
Moved 5.0 changelog entry from 5.0.38 to 5.0.44. Moved 5.1 changelog entry from 5.1.18 to 5.1.19.