@@ -1341,7 +1341,7 @@ func (e *RowsEvent) decodeValue(data []byte, tp byte, meta uint16, isPartial boo
13411341 hours := int (t / 10000 )
13421342 minutes := int ((t % 10000 ) / 100 )
13431343 seconds := int (t % 100 )
1344- if months == 0 || days == 0 {
1344+ if ! e . parseTime || months == 0 || days == 0 {
13451345 v = fmt .Sprintf ("%04d-%02d-%02d %02d:%02d:%02d" ,
13461346 years , months , days , hours , minutes , seconds )
13471347 } else {
@@ -1361,7 +1361,7 @@ func (e *RowsEvent) decodeValue(data []byte, tp byte, meta uint16, isPartial boo
13611361 }
13621362 }
13631363 case mysql .MYSQL_TYPE_DATETIME2 :
1364- v , n , err = decodeDatetime2 (data , meta )
1364+ v , n , err = decodeDatetime2 (data , meta , e . parseTime )
13651365 v = e .parseFracTime (v )
13661366 case mysql .MYSQL_TYPE_TIME :
13671367 n = 3
@@ -1686,7 +1686,7 @@ func decodeTimestamp2(data []byte, dec uint16, timestampStringLocation *time.Loc
16861686
16871687const DATETIMEF_INT_OFS int64 = 0x8000000000
16881688
1689- func decodeDatetime2 (data []byte , dec uint16 ) (interface {}, int , error ) {
1689+ func decodeDatetime2 (data []byte , dec uint16 , parseTime bool ) (interface {}, int , error ) {
16901690 // get datetime binary length
16911691 n := int (5 + (dec + 1 )/ 2 )
16921692
@@ -1736,8 +1736,8 @@ func decodeDatetime2(data []byte, dec uint16) (interface{}, int, error) {
17361736 // minute = 0 = 0b000000
17371737 // second = 0 = 0b000000
17381738 // integer value = 0b1100100000010110000100000000000000000 = 107420450816
1739- if intPart < 107420450816 || month == 0 || day == 0 {
1740- return formatBeforeUnixZeroTime (year , month , day , hour , minute , second , int (frac ), int (dec )), n , nil
1739+ if ! parseTime || intPart < 107420450816 || month == 0 || day == 0 {
1740+ return formatDatetime (year , month , day , hour , minute , second , int (frac ), int (dec )), n , nil
17411741 }
17421742
17431743 return fracTime {
0 commit comments