Bug #18997 | DATE_ADD and DATE_SUB perform year2K autoconversion magic on 4-digit year value | ||
---|---|---|---|
Submitted: | 10 Apr 2006 21:41 | Modified: | 4 Jun 2007 18:34 |
Reporter: | Hartmut Holzgraefe | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server | Severity: | S3 (Non-critical) |
Version: | 5.1 | OS: | Any (*) |
Assigned to: | Tatiana Azundris Nuernberg | CPU Architecture: | Any |
[10 Apr 2006 21:41]
Hartmut Holzgraefe
[11 Apr 2006 1:39]
MySQL Verification Team
Thank you for the bug report.
[25 Apr 2006 5: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/5450
[15 May 2006 21:43]
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/6416
[16 May 2006 1:32]
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/6427
[16 May 2006 1:49]
Tatiana Azundris Nuernberg
fixed in 5.1.11-beta. if input year for date_add() / date_sub() with INTERVAL is low enough for calc_daynr() to possibly return incorrect results (calc_daynr() has no information on whether the year is low because it was a two-digit year ('77) or because it was a really low four-digit year (0077) and will indiscriminately try to turn the value into a four-digit year by adding 1900 or 2000 respectively), the functions will now throw NULL.
[26 May 2006 13:56]
Paul DuBois
Noted in 5.1.11 changelog, 5.1 upgrade section. For dates with 4-digit year parts less than 200, an implicit conversion to add a century was applied for date arithmetic performed with DATE_ADD(), DATE_SUB(), + INTERVAL, and - INTERVAL. (For example, DATE_ADD('0050-01-01 00:00:00', INTERVAL 0 SECOND) became '2050-01-01 00:00:00'.) Now these operations return NULL rather than an incorrect non-NULL value.
[4 Oct 2006 7:14]
Roberto Spadim
why don't make anything like with: sql_mode= ALLOW_INVALID_DATES 0055 = 0055 without ALLOW_INVALID_DATES 0055 = 2055 or 1955 what you say?
[26 Mar 2007 9:40]
Michael Widenius
Made a better bug fix for date handling. Moved out year-2000 handling from calc_daynr() to more appropriate places, as we in calc_daynr() don't know the original lenght for the day part. This fixes that date arithmetic now works properly with dates in the range of 0000-9999 (in other words, fixes wrong date handling for years 0000-0199 the previous bug fix introduced) Fix should be in 5.1.18
[10 Apr 2007 15:42]
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:19]
Paul DuBois
Noted in 5.1.18 changelog. For dates with 4-digit year parts less than 200, an incorrect implicit conversion to add a century was applied for date arithmetic performed with DATE_ADD(), DATE_SUB(), + INTERVAL, and - INTERVAL. (For example, DATE_ADD('0050-01-01 00:00:00', INTERVAL 0 SECOND) became '2050-01-01 00:00:00'.) Setting report back to Patch Queued: Will this fix be applied to 5.0?
[24 Apr 2007 1:22]
Paul DuBois
Removed the note from the 5.1 upgrade section because the dates are now not converted to NULL, they are left alone.
[14 May 2007 12:52]
Tatiana Azundris Nuernberg
pushed to 5.0.42-maint
[22 May 2007 17:01]
Bugs System
Pushed into 5.1.19-beta
[22 May 2007 17:02]
Bugs System
Pushed into 5.0.44
[4 Jun 2007 18:34]
Paul DuBois
Noted in 5.0.44 changelog. Moved 5.1 changelog entry from 5.1.18 to 5.1.19.