sql - STR_TO_DATE discrepancy between MySQL 5.5 and MySQL 5.6 -
this sql returns date in mysql 5.5 null in mysql 5.6. why?
select date(str_to_date('2015-01', '%y-%m')) + interval 1 day; here's sql fiddle mysql 5.5 , 5.6. str_to_date returns date in both instances. converting result using date works. problem comes when trying add interval. doesn't matter if add interval str_to_date(...) or date(str_to_date(...)), result same. however, removing str_to_date makes work.
select str_to_date('2015-01', '%y-%m') same_a1, str_to_date('2015-01-01', '%y-%m') same_a2, str_to_date('2015-01', '%y-%m-%d') same_a3, str_to_date('2015-01-01', '%y-%m-%d') same_a4, date(str_to_date('2015-01', '%y-%m')) same_b1, date(str_to_date('2015-01-01', '%y-%m')) same_b2, date(str_to_date('2015-01', '%y-%m-%d')) same_b3, date(str_to_date('2015-01-01', '%y-%m-%d')) same_b4, str_to_date('2015-01', '%y-%m') + interval 1 day same_c1, str_to_date('2015-01-01', '%y-%m') + interval 1 day same_c2, str_to_date('2015-01', '%y-%m-%d') + interval 1 day same_c3, str_to_date('2015-01-01', '%y-%m-%d') + interval 1 day same_c4, date(str_to_date('2015-01', '%y-%m')) + interval 1 day different_d1, date(str_to_date('2015-01-01', '%y-%m')) + interval 1 day different_d2, date(str_to_date('2015-01', '%y-%m-%d')) + interval 1 day different_d3, date(str_to_date('2015-01-01', '%y-%m-%d')) + interval 1 day same_d4, date('2015-01') + interval 1 day same_e1, date('2015-01-01') + interval 1 day same_e2 ; i searched release notes couldn't find anything. going on? known change? bug?
it's known change, unwittingly introduced versions 5.1.59, 5.5.16 , 5.6.3 (but rolled in versions 5.1.62 , 5.5.21; retained in 5.6 line):
incompatible change: handling of date-related assertion modified.
however, consequence of change several functions become more strict when passed
date()function value argument , reject incomplete dates day part of zero. these functions affected:convert_tz(),date_add(),date_sub(),dayofyear(),last_day(),timestampdiff(),to_days(),to_seconds(),week(),weekday(),weekofyear(),yearweek(). because changes date-handling behavior in general availability-status series (mysql 5.1 , 5.5), reverted in 5.1.62 , 5.5.21. change retained in mysql 5.6.references: see bug #13458237.
you affected because + interval notation syntactic sugar around date_add() function.
Comments
Post a Comment