code: func DateTimeIsOverflow(sc *stmtctx.StatementContext, date Time) (bool, error) {
  	tz := sc.TimeZone
  	if tz == nil {
  		tz = gotime.Local
  	}
  
  	var err error
  	var b, e, t gotime.Time
  	switch date.Type {
  	case mysql.TypeDate, mysql.TypeDatetime:
  		if b, err = MinDatetime.GoTime(tz); err != nil {
  			return false, err
  		}
  		if e, err = MaxDatetime.GoTime(tz); err != nil {
  			return false, err
  		}
  	case mysql.TypeTimestamp:
  		minTS, maxTS := MinTimestamp, MaxTimestamp
  		if tz != gotime.UTC {
  			if err = minTS.ConvertTimeZone(gotime.UTC, tz); err != nil {
  				return false, err
  			}
  			if err = maxTS.ConvertTimeZone(gotime.UTC, tz); err != nil {
  				return false, err
  			}
  		}
  		if b, err = minTS.Time.GoTime(tz); err != nil {
  			return false, err
  		}
  		if e, err = maxTS.Time.GoTime(tz); err != nil {
  			return false, err
  		}
  	default:
  		return false, nil
  	}
  
  	if t, err = date.Time.GoTime(tz); err != nil {
  		return false, err
  	}
  
  	inRange := (t.After(b) || t.Equal(b)) && (t.Before(e) || t.Equal(e))
  	return !inRange, nil
  }
docs: // DateTimeIsOverflow return if this date is overflow.
  // See: https://dev.mysql.com/doc/refman/8.0/en/datetime.html