docs: public String getInternalString(ColumnInformation columnInfo, Calendar cal, TimeZone timeZone)
        throws SQLException {
      if (lastValueWasNull()) {
        return null;
      }
  
      switch (columnInfo.getColumnType()) {
        case BIT:
          return String.valueOf(parseBit());
        case DOUBLE:
        case FLOAT:
          return zeroFillingIfNeeded(new String(buf, pos, length, StandardCharsets.UTF_8),
              columnInfo);
        case TIME:
          return getInternalTimeString(columnInfo);
        case DATE:
          Date date = getInternalDate(columnInfo, cal, timeZone);
          if (date == null) {
            if ((lastValueNull & BIT_LAST_ZERO_DATE) != 0) {
              lastValueNull ^= BIT_LAST_ZERO_DATE;
              return new String(buf, pos, length, StandardCharsets.UTF_8);
            }
            return null;
          }
          return date.toString();
        case YEAR:
          if (options.yearIsDateType) {
            Date date1 = getInternalDate(columnInfo, cal, timeZone);
            return (date1 == null) ? null : date1.toString();
          }
          break;
        case TIMESTAMP:
        case DATETIME:
          Timestamp timestamp = getInternalTimestamp(columnInfo, cal, timeZone);
          if (timestamp == null) {
            if ((lastValueNull & BIT_LAST_ZERO_DATE) != 0) {
              lastValueNull ^= BIT_LAST_ZERO_DATE;
              return new String(buf, pos, length, StandardCharsets.UTF_8);
            }
            return null;
          }
          return timestamp.toString();
        case DECIMAL:
        case OLDDECIMAL:
          BigDecimal bigDecimal = getInternalBigDecimal(columnInfo);
          return (bigDecimal == null) ? null : zeroFillingIfNeeded(bigDecimal.toString(), columnInfo);
        case NULL:
          return null;
        default:
          break;
      }
  
      if (maxFieldSize > 0) {
        return new String(buf, pos, Math.min(maxFieldSize * 3, length), StandardCharsets.UTF_8)
            .substring(0, Math.min(maxFieldSize, length));
      }
  
      return new String(buf, pos, length, StandardCharsets.UTF_8);
    }