You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by yi...@apache.org on 2025/12/03 14:26:01 UTC

(doris) branch branch-4.0 updated: [refine](mysql output) Remove text-mode usage of MysqlRowBuffer — it will now be used only for the binary format. (#58675)

This is an automated email from the ASF dual-hosted git repository.

yiguolei pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-4.0 by this push:
     new d2beff5a4ee [refine](mysql output) Remove text-mode usage of MysqlRowBuffer — it will now be used only for the binary format. (#58675)
d2beff5a4ee is described below

commit d2beff5a4eed466af4cdbee0a16fd624471321e1
Author: Mryange <ya...@selectdb.com>
AuthorDate: Wed Dec 3 22:25:53 2025 +0800

    [refine](mysql output) Remove text-mode usage of MysqlRowBuffer — it will now be used only for the binary format. (#58675)
    
    …will now be used only for the binary format. (#58425)
    https://github.com/apache/doris/pull/58425
    MysqlRowBuffer is used only for binary output
    (write_column_to_mysql_binary).
    Remove _dynamic_mode — types that previously relied on it (for example
    array, map, struct) will now be converted to strings before being
    written to MysqlRowBuffer.
    
    ### What problem does this PR solve?
    
    Issue Number: close #xxx
    
    Related PR: #xxx
    
    Problem Summary:
    
    ### Release note
    
    None
    
    ### Check List (For Author)
    
    - Test <!-- At least one of them must be included. -->
        - [ ] Regression test
        - [ ] Unit Test
        - [ ] Manual test (add detailed scripts or steps below)
        - [ ] No need to test or manual test. Explain why:
    - [ ] This is a refactor/code format and no logic has been changed.
            - [ ] Previous test can cover this change.
            - [ ] No code files have been changed.
            - [ ] Other reason <!-- Add your reason?  -->
    
    - Behavior changed:
        - [ ] No.
        - [ ] Yes. <!-- Explain the behavior change -->
    
    - Does this need documentation?
        - [ ] No.
    - [ ] Yes. <!-- Add document PR link here. eg:
    https://github.com/apache/doris-website/pull/1214 -->
    
    ### Check List (For Reviewer who merge this PR)
    
    - [ ] Confirm the release note
    - [ ] Confirm test cases
    - [ ] Confirm document
    - [ ] Add branch pick label <!-- Add branch pick label that this PR
    should merge into -->
---
 be/src/util/mysql_global.h                         |  40 ++
 be/src/util/mysql_row_buffer.cpp                   | 412 +++++----------------
 be/src/util/mysql_row_buffer.h                     |  41 +-
 .../vec/data_types/serde/data_type_array_serde.cpp |  65 +---
 .../vec/data_types/serde/data_type_array_serde.h   |   8 -
 .../data_types/serde/data_type_bitmap_serde.cpp    |  40 +-
 .../vec/data_types/serde/data_type_bitmap_serde.h  |  10 -
 .../serde/data_type_date_or_datetime_serde.cpp     |  21 +-
 .../serde/data_type_date_or_datetime_serde.h       |   9 -
 .../serde/data_type_datetimev2_serde.cpp           |  23 +-
 .../data_types/serde/data_type_datetimev2_serde.h  |   8 -
 .../data_types/serde/data_type_datev2_serde.cpp    |  23 +-
 .../vec/data_types/serde/data_type_datev2_serde.h  |   9 -
 .../data_types/serde/data_type_decimal_serde.cpp   |  25 +-
 .../vec/data_types/serde/data_type_decimal_serde.h |   8 -
 .../vec/data_types/serde/data_type_hll_serde.cpp   |  40 +-
 be/src/vec/data_types/serde/data_type_hll_serde.h  |  10 -
 .../vec/data_types/serde/data_type_ipv4_serde.cpp  |  23 +-
 be/src/vec/data_types/serde/data_type_ipv4_serde.h |   9 -
 .../vec/data_types/serde/data_type_ipv6_serde.cpp  |  23 +-
 be/src/vec/data_types/serde/data_type_ipv6_serde.h |   9 -
 .../vec/data_types/serde/data_type_jsonb_serde.cpp |  23 +-
 .../vec/data_types/serde/data_type_jsonb_serde.h   |   9 -
 .../vec/data_types/serde/data_type_map_serde.cpp   |  86 +----
 be/src/vec/data_types/serde/data_type_map_serde.h  |   8 -
 .../vec/data_types/serde/data_type_nothing_serde.h |   6 -
 .../data_types/serde/data_type_nullable_serde.cpp  |  27 +-
 .../data_types/serde/data_type_nullable_serde.h    |   8 -
 .../data_types/serde/data_type_number_serde.cpp    |  25 +-
 .../vec/data_types/serde/data_type_number_serde.h  |  10 -
 .../serde/data_type_quantilestate_serde.h          |  40 +-
 be/src/vec/data_types/serde/data_type_serde.h      |  17 -
 .../data_types/serde/data_type_string_serde.cpp    |  13 -
 .../vec/data_types/serde/data_type_string_serde.h  |  24 +-
 .../data_types/serde/data_type_struct_serde.cpp    |  74 +---
 .../vec/data_types/serde/data_type_struct_serde.h  |  13 -
 .../vec/data_types/serde/data_type_time_serde.cpp  |  15 +-
 be/src/vec/data_types/serde/data_type_time_serde.h |   8 -
 .../data_types/serde/data_type_varbinary_serde.cpp |  17 +-
 .../data_types/serde/data_type_varbinary_serde.h   |  10 -
 .../data_types/serde/data_type_variant_serde.cpp   |  24 +-
 .../vec/data_types/serde/data_type_variant_serde.h |  10 -
 be/src/vec/sink/vmysql_result_writer.cpp           |  86 ++---
 be/src/vec/sink/writer/vfile_result_writer.cpp     |  34 +-
 be/test/util/mysql_row_buffer_test.cpp             | 119 +-----
 .../vec/data_types/common_data_type_serder_test.h  |  14 -
 be/test/vec/data_types/data_type_array_test.cpp    |   5 -
 be/test/vec/data_types/data_type_ip_test.cpp       |  17 -
 be/test/vec/data_types/datetime_round_test.cpp     |  41 --
 .../serde/data_type_jsonb_serde_test.cpp           |  15 +-
 .../serde/data_type_serde_agg_state_test.cpp       |  54 ---
 .../serde/data_type_serde_bitmap_test.cpp          |  25 --
 .../serde/data_type_serde_datetime_v1_test.cpp     |   9 -
 .../serde/data_type_serde_datetime_v2_test.cpp     |   9 -
 .../serde/data_type_serde_decimal_test.cpp         |   9 -
 .../data_type_serde_fixed_length_object_test.cpp   |  28 --
 .../data_types/serde/data_type_serde_hll_test.cpp  |  27 --
 .../serde/data_type_serde_number_test.cpp          |   9 -
 .../serde/data_type_serde_quantile_state_test.cpp  |  29 --
 .../serde/data_type_serde_string_test.cpp          |   9 -
 .../serde/data_type_serde_timev2_test.cpp          |  55 ---
 .../serde/data_type_serde_varbinary_test.cpp       |  22 +-
 62 files changed, 277 insertions(+), 1662 deletions(-)

diff --git a/be/src/util/mysql_global.h b/be/src/util/mysql_global.h
index 84d4223564f..309bffb8d5a 100644
--- a/be/src/util/mysql_global.h
+++ b/be/src/util/mysql_global.h
@@ -20,6 +20,9 @@
 #include <float.h>
 #include <stdint.h>
 
+#include <cstring>
+#include <string>
+
 namespace doris {
 
 typedef unsigned char uchar;
@@ -61,4 +64,41 @@ typedef unsigned char uchar;
 /* -[digits].[frac] */
 #define MAX_DECIMAL_STR_LENGTH 29
 
+inline void direct_write_to_mysql_result_string(std::string& mysql_rows, const char* str,
+                                                size_t size) {
+    // MySQL protocol length encoding:
+    // <= 250: 1 byte for length
+    // < 65536: 1 byte (252) + 2 bytes for length
+    // < 16777216: 1 byte (253) + 3 bytes for length
+    // >= 16777216: 1 byte (254) + 8 bytes for length
+
+    char buf[16];
+    if (size < 251ULL) {
+        int1store(buf, size);
+        mysql_rows.append(buf, 1);
+    } else if (size < 65536ULL) {
+        buf[0] = static_cast<char>(252);
+        uint16_t temp16 = static_cast<uint16_t>(size);
+        memcpy(buf + 1, &temp16, sizeof(temp16));
+        mysql_rows.append(buf, 3);
+    } else if (size < 16777216ULL) {
+        buf[0] = static_cast<char>(253);
+        int3store(buf + 1, size);
+        mysql_rows.append(buf, 4);
+    } else {
+        buf[0] = static_cast<char>(254);
+        uint64_t temp64 = static_cast<uint64_t>(size);
+        memcpy(buf + 1, &temp64, sizeof(temp64));
+        mysql_rows.append(buf, 9);
+    }
+
+    // Append string content
+    mysql_rows.append(str, size);
+}
+
+inline void direct_write_to_mysql_result_null(std::string& mysql_rows) {
+    // MySQL protocol for NULL value is a single byte with value 251
+    mysql_rows.push_back(static_cast<char>(251));
+}
+
 } // namespace doris
diff --git a/be/src/util/mysql_row_buffer.cpp b/be/src/util/mysql_row_buffer.cpp
index 657f99d5514..f0fd4012740 100644
--- a/be/src/util/mysql_row_buffer.cpp
+++ b/be/src/util/mysql_row_buffer.cpp
@@ -77,17 +77,10 @@ static char* pack_vlen(char* packet, uint64_t length) {
     return packet + 8;
 }
 
-template <bool is_binary_format>
-MysqlRowBuffer<is_binary_format>::MysqlRowBuffer()
-        : _pos(_default_buf),
-          _buf(_default_buf),
-          _buf_size(sizeof(_default_buf)),
-          _dynamic_mode(0),
-          _len_pos(0) {}
-
-template <bool is_binary_format>
-void MysqlRowBuffer<is_binary_format>::start_binary_row(uint64_t num_cols) {
-    assert(is_binary_format);
+MysqlRowBuffer::MysqlRowBuffer()
+        : _pos(_default_buf), _buf(_default_buf), _buf_size(sizeof(_default_buf)) {}
+
+void MysqlRowBuffer::start_binary_row(uint64_t num_cols) {
     auto bit_fields = (num_cols + 9) / 8;
     reserve(bit_fields + 1);
     memset(_pos, 0, 1 + bit_fields);
@@ -95,43 +88,14 @@ void MysqlRowBuffer<is_binary_format>::start_binary_row(uint64_t num_cols) {
     _field_pos = 0;
 }
 
-template <bool is_binary_format>
-MysqlRowBuffer<is_binary_format>::~MysqlRowBuffer() {
+MysqlRowBuffer::~MysqlRowBuffer() {
     if (_buf != _default_buf) {
         delete[] _buf;
         _buf = _default_buf;
     }
 }
 
-template <bool is_binary_format>
-void MysqlRowBuffer<is_binary_format>::open_dynamic_mode() {
-    if (!_dynamic_mode) {
-        // if _pos now exactly at the end of _buf memory,
-        // we should reserve 1 byte for _dynamic_mode flag byte to avoid *pos = 254
-        // cause _dynamic_mode flag byte be overwritten
-        reserve(1 + 8);
-        *_pos++ = NEXT_EIGHT_BYTE; // *_pos = 254 ; _pos++
-        // write length when dynamic mode close
-        _len_pos = (_pos - _buf);
-        _pos = _pos + 8;
-        _field_pos++;
-    }
-    _dynamic_mode++;
-}
-
-template <bool is_binary_format>
-void MysqlRowBuffer<is_binary_format>::close_dynamic_mode() {
-    _dynamic_mode--;
-
-    // _buf + _len_pos is the position to write length
-    if (!_dynamic_mode) {
-        int8store((_buf + _len_pos), _pos - (_buf + _len_pos) - 8);
-        _len_pos = 0;
-    }
-}
-
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::reserve(int64_t size) {
+int MysqlRowBuffer::reserve(int64_t size) {
     DCHECK(size > 0);
 
     int64_t need_size = size + (_pos - _buf);
@@ -157,71 +121,20 @@ int MysqlRowBuffer<is_binary_format>::reserve(int64_t size) {
     return 0;
 }
 
-template <typename T>
-char* add_int(T data, char* pos, bool dynamic_mode) {
-    char* init_pos = pos;
-    pos += !dynamic_mode;
-    auto end = fmt::format_to(pos, FMT_COMPILE("{}"), data);
-    if (!dynamic_mode) {
-        int1store(init_pos, end - pos);
-    }
-    return end;
-}
-
-static char* add_largeint(int128_t data, char* pos, bool dynamic_mode) {
-    auto length = LargeIntValue::to_buffer(data, pos + !dynamic_mode);
-    if (!dynamic_mode) {
-        int1store(pos++, length);
-    }
-    return pos + length;
-}
-
-template <typename T>
-char* add_float(T data, char* pos, bool dynamic_mode) {
-    static_assert(std::is_same_v<T, float> || std::is_same_v<T, double>);
-    int length = vectorized::CastToString::from_number(data, pos + !dynamic_mode);
-    if (!dynamic_mode) {
-        int1store(pos++, length);
-    }
-    return pos + length;
-}
-
-static char* add_timev2(double data, char* pos, bool dynamic_mode, int scale) {
-    uint8_t length = timev2_to_buffer_from_double(data, pos + !dynamic_mode, scale);
-    if (!dynamic_mode) {
-        int1store(pos++, length);
-    }
-    return pos + length;
-}
-
-template <typename DateType>
-static char* add_datetime(const DateType& data, char* pos, bool dynamic_mode) {
-    int length = data.to_buffer(pos + !dynamic_mode);
-    if (!dynamic_mode) {
-        int1store(pos++, length);
-    }
-    return pos + length;
-}
-
-static char* add_decimal(const DecimalV2Value& data, int round_scale, char* pos,
-                         bool dynamic_mode) {
-    int length = data.to_buffer(pos + !dynamic_mode, round_scale);
-    if (!dynamic_mode) {
-        int1store(pos++, length);
-    }
+static char* add_decimal(const DecimalV2Value& data, int round_scale, char* pos) {
+    int length = data.to_buffer(pos + 1, round_scale);
+    int1store(pos++, length);
     return pos + length;
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::append(const char* data, int64_t len) {
+int MysqlRowBuffer::append(const char* data, int64_t len) {
     reserve(len);
     memcpy(_pos, data, len);
     _pos += len;
     return 0;
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::append_var_string(const char* data, int64_t len) {
+int MysqlRowBuffer::append_var_string(const char* data, int64_t len) {
     /*
      The +9 comes from that strings of length longer than 16M require
      9 bytes to be stored (see net_store_length).
@@ -233,120 +146,60 @@ int MysqlRowBuffer<is_binary_format>::append_var_string(const char* data, int64_
     return 0;
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_tinyint(int8_t data) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[1];
-        _field_pos++;
-        int1store(buff, data);
-        return append(buff, 1);
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(3 + MAX_TINYINT_WIDTH);
-    _pos = add_int(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_tinyint(int8_t data) {
+    char buff[1];
+    _field_pos++;
+    int1store(buff, data);
+    return append(buff, 1);
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_smallint(int16_t data) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[2];
-        _field_pos++;
-        int2store(buff, data);
-        return append(buff, 2);
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(3 + MAX_SMALLINT_WIDTH);
-    _pos = add_int(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_smallint(int16_t data) {
+    char buff[2];
+    _field_pos++;
+    int2store(buff, data);
+    return append(buff, 2);
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_int(int32_t data) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[4];
-        _field_pos++;
-        int4store(buff, data);
-        return append(buff, 4);
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(3 + MAX_INT_WIDTH);
-    _pos = add_int(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_int(int32_t data) {
+    char buff[4];
+    _field_pos++;
+    int4store(buff, data);
+    return append(buff, 4);
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_bigint(int64_t data) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[8];
-        _field_pos++;
-        int8store(buff, data);
-        return append(buff, 8);
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(3 + MAX_BIGINT_WIDTH);
-
-    _pos = add_int(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_bigint(int64_t data) {
+    char buff[8];
+    _field_pos++;
+    int8store(buff, data);
+    return append(buff, 8);
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_unsigned_bigint(uint64_t data) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[8];
-        _field_pos++;
-        int8store(buff, data);
-        return append(buff, 8);
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(4 + MAX_BIGINT_WIDTH);
-
-    _pos = add_int(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_unsigned_bigint(uint64_t data) {
+    char buff[8];
+    _field_pos++;
+    int8store(buff, data);
+    return append(buff, 8);
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_largeint(int128_t data) {
-    if (is_binary_format && !_dynamic_mode) {
-        // large int as type string
-        std::string value = LargeIntValue::to_string(data);
-        _field_pos++;
-        return append_var_string(value.data(), value.size());
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(3 + MAX_LARGEINT_WIDTH);
-
-    _pos = add_largeint(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_largeint(int128_t data) {
+    // large int as type string
+    std::string value = LargeIntValue::to_string(data);
+    _field_pos++;
+    return append_var_string(value.data(), value.size());
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_float(float data) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[4];
-        _field_pos++;
-        float4store(buff, data);
-        return append(buff, 4);
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(3 + MAX_FLOAT_STR_LENGTH);
-
-    _pos = add_float(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_float(float data) {
+    char buff[4];
+    _field_pos++;
+    float4store(buff, data);
+    return append(buff, 4);
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_double(double data) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[8];
-        _field_pos++;
-        float8store(buff, data);
-        return append(buff, 8);
-    }
-    // 1 for string trail, 1 for length, 1 for sign, other for digits
-    reserve(3 + MAX_DOUBLE_STR_LENGTH);
-    _pos = add_float(data, _pos, _dynamic_mode);
-    return 0;
+int MysqlRowBuffer::push_double(double data) {
+    char buff[8];
+    _field_pos++;
+    float8store(buff, data);
+    return append(buff, 8);
 }
 
 // Refer to https://dev.mysql.com/doc/refman/5.7/en/time.html
@@ -412,153 +265,92 @@ static int encode_binary_timev2(char* buff, double time, int scale) {
     return pos; // Return total bytes written to buffer
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_timev2(double data, int scale) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[13];
-        _field_pos++;
-        int length = encode_binary_timev2(buff, data, scale);
-        return append(buff, length);
-    }
+int MysqlRowBuffer::push_timev2(double data, int scale) {
+    char buff[13];
+    _field_pos++;
+    int length = encode_binary_timev2(buff, data, scale);
+    return append(buff, length);
+}
 
-    reserve(2 + MAX_TIME_WIDTH);
-    _pos = add_timev2(data, _pos, _dynamic_mode, scale);
-    return 0;
+template <typename DateType>
+int MysqlRowBuffer::push_vec_datetime(DateType& data, int scale) {
+    return push_datetime(data, scale);
 }
 
-template <bool is_binary_format>
 template <typename DateType>
-int MysqlRowBuffer<is_binary_format>::push_vec_datetime(DateType& data, int scale) {
-    if (is_binary_format && !_dynamic_mode) {
-        return push_datetime(data, scale);
+int MysqlRowBuffer::push_datetime(const DateType& data, int scale) {
+    char buff[12], *pos;
+    size_t length;
+    _field_pos++;
+    pos = buff + 1;
+
+    int2store(pos, data.year());
+    pos[2] = (uchar)data.month();
+    pos[3] = (uchar)data.day();
+    pos[4] = (uchar)data.hour();
+    pos[5] = (uchar)data.minute();
+    pos[6] = (uchar)data.second();
+    if (data.hour() || data.minute() || data.second()) {
+        length = 7;
+    } else if (data.year() || data.month() || data.day()) {
+        length = 4;
+    } else {
+        length = 0;
     }
-
-    char buf[64];
-    char* pos = nullptr;
     if constexpr (std::is_same_v<DateType, DateV2Value<DateV2ValueType>> ||
                   std::is_same_v<DateType, DateV2Value<DateTimeV2ValueType>>) {
-        pos = data.to_string(buf, scale);
-    } else {
-        pos = data.to_string(buf);
-    }
-    return push_string(buf, pos - buf - 1);
-}
-
-template <bool is_binary_format>
-template <typename DateType>
-int MysqlRowBuffer<is_binary_format>::push_datetime(const DateType& data, int scale) {
-    if (is_binary_format && !_dynamic_mode) {
-        char buff[12], *pos;
-        size_t length;
-        _field_pos++;
-        pos = buff + 1;
-
-        int2store(pos, data.year());
-        pos[2] = (uchar)data.month();
-        pos[3] = (uchar)data.day();
-        pos[4] = (uchar)data.hour();
-        pos[5] = (uchar)data.minute();
-        pos[6] = (uchar)data.second();
-        if (data.hour() || data.minute() || data.second()) {
-            length = 7;
-        } else if (data.year() || data.month() || data.day()) {
-            length = 4;
-        } else {
-            length = 0;
+        if (scale > 0 || data.microsecond()) {
+            int4store(pos + 7, data.microsecond());
+            length = 11;
         }
-        if constexpr (std::is_same_v<DateType, DateV2Value<DateV2ValueType>> ||
-                      std::is_same_v<DateType, DateV2Value<DateTimeV2ValueType>>) {
-            if (scale > 0 || data.microsecond()) {
-                int4store(pos + 7, data.microsecond());
-                length = 11;
-            }
-        }
-
-        buff[0] = (char)length; // Length is stored first
-        return append(buff, length + 1);
     }
-    // 1 for string trail, 1 for length, other for datetime str
-    reserve(2 + MAX_DATETIME_WIDTH);
 
-    _pos = add_datetime(data, _pos, _dynamic_mode);
-    return 0;
+    buff[0] = (char)length; // Length is stored first
+    return append(buff, length + 1);
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_decimal(const DecimalV2Value& data, int round_scale) {
-    if (is_binary_format && !_dynamic_mode) {
-        ++_field_pos;
-    }
-    // 1 for string trail, 1 for length, other for decimal str
+int MysqlRowBuffer::push_decimal(const DecimalV2Value& data, int round_scale) {
+    ++_field_pos;
     reserve(2 + MAX_DECIMAL_WIDTH);
-    _pos = add_decimal(data, round_scale, _pos, _dynamic_mode);
+    _pos = add_decimal(data, round_scale, _pos);
     return 0;
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_ipv4(const IPv4Value& ipv4_val) {
+int MysqlRowBuffer::push_ipv4(const IPv4Value& ipv4_val) {
     auto ipv4_str = ipv4_val.to_string();
     return push_string(ipv4_str.c_str(), ipv4_str.length());
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_ipv6(const IPv6Value& ipv6_val) {
+int MysqlRowBuffer::push_ipv6(const IPv6Value& ipv6_val) {
     auto ipv6_str = ipv6_val.to_string();
     return push_string(ipv6_str.c_str(), ipv6_str.length());
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_string(const char* str, int64_t length) {
-    if (is_binary_format && !_dynamic_mode) {
-        ++_field_pos;
-    }
+int MysqlRowBuffer::push_string(const char* str, int64_t length) {
+    ++_field_pos;
     DCHECK(str != nullptr) << "input string is nullptr.";
     reserve(9 + length);
-    if (!_dynamic_mode) {
-        _pos = pack_vlen(_pos, length);
-    }
+    _pos = pack_vlen(_pos, length);
     memcpy(_pos, str, length);
     _pos += length;
     return 0;
 }
 
-template <bool is_binary_format>
-int MysqlRowBuffer<is_binary_format>::push_null() {
-    if (_dynamic_mode) {
-        // for nested type
-        return 0;
-    }
-
-    if constexpr (is_binary_format) {
-        uint offset = (_field_pos + 2) / 8 + 1;
-        uint bit = (1 << ((_field_pos + 2) & 7));
-        /* Room for this as it's allocated start_binary_row*/
-        char* to = _buf + offset;
-        *to = (char)((uchar)*to | (uchar)bit);
-        _field_pos++;
-        return 0;
-    }
-
-    reserve(1);
-    int1store(_pos, 251);
-    _pos += 1;
+int MysqlRowBuffer::push_null() {
+    uint offset = (_field_pos + 2) / 8 + 1;
+    uint bit = (1 << ((_field_pos + 2) & 7));
+    /* Room for this as it's allocated start_binary_row*/
+    char* to = _buf + offset;
+    *to = (char)((uchar)*to | (uchar)bit);
+    _field_pos++;
     return 0;
 }
 
-template class MysqlRowBuffer<true>;
-template class MysqlRowBuffer<false>;
-
-template int MysqlRowBuffer<true>::push_vec_datetime<DateV2Value<DateV2ValueType>>(
-        DateV2Value<DateV2ValueType>& value, int scale);
-template int MysqlRowBuffer<true>::push_vec_datetime<DateV2Value<DateTimeV2ValueType>>(
-        DateV2Value<DateTimeV2ValueType>& value, int scale);
-template int MysqlRowBuffer<true>::push_vec_datetime<VecDateTimeValue>(VecDateTimeValue& value,
-                                                                       int scale);
-template int MysqlRowBuffer<false>::push_vec_datetime<DateV2Value<DateV2ValueType>>(
+template int MysqlRowBuffer::push_vec_datetime<DateV2Value<DateV2ValueType>>(
         DateV2Value<DateV2ValueType>& value, int scale);
-template int MysqlRowBuffer<false>::push_vec_datetime<DateV2Value<DateTimeV2ValueType>>(
+template int MysqlRowBuffer::push_vec_datetime<DateV2Value<DateTimeV2ValueType>>(
         DateV2Value<DateTimeV2ValueType>& value, int scale);
-template int MysqlRowBuffer<false>::push_vec_datetime<VecDateTimeValue>(VecDateTimeValue& value,
-                                                                        int scale);
+template int MysqlRowBuffer::push_vec_datetime<VecDateTimeValue>(VecDateTimeValue& value,
+                                                                 int scale);
 
 } // namespace doris
diff --git a/be/src/util/mysql_row_buffer.h b/be/src/util/mysql_row_buffer.h
index e792691c1ef..4751e4b36fc 100644
--- a/be/src/util/mysql_row_buffer.h
+++ b/be/src/util/mysql_row_buffer.h
@@ -52,7 +52,6 @@ class DecimalV2Value;
 class IPv4Value;
 class IPv6Value;
 
-template <bool is_binary_format = false>
 class MysqlRowBuffer {
 public:
     MysqlRowBuffer();
@@ -89,40 +88,6 @@ public:
     const char* pos() const { return _pos; }
     int64_t length() const { return _pos - _buf; }
 
-    /**
-     * Why?
-     * Because the Nested-Type's data need pushed multiple times, but mysql protocol don't
-     * support nested type and each push will decide a column data.
-     *
-     * How?
-     * Dynamic mode allow we push data in a column multiple times, and allow recursive push.
-     * We will think that the length of the next column is uncertain when open dynamic
-     * mode, so we will set the flag to 254(longest flag) and skip 8 bytes which used for
-     * record length, then compute the actual data length when close dynamic mode.
-     * In a recursive call(special for nested type), the mode will open multiple times, but
-     * the data is actually written in one column, so we only need to deal it at the beginning
-     * and at the end.
-     *
-     * the code:
-     *     mrb.push_tinyint(5);
-     *     mrb.push_smallint(120);
-     *     mrb.push_int(-30000);
-     *
-     * In normal mode, the buffer contains three column:
-     *  1-'5'-3-'120'-6-'-30000'
-     *
-     * Same code in dynamic mode, the buffer contains a column:
-     *  254-48-'5'-'120'-'-30000'
-     *
-     * NOTE: The open_dynamic_mode() and close_dynamic_mode() need appear in pairs
-     */
-    void open_dynamic_mode();
-
-    /**
-     * NOTE: The open_dynamic_mode() and close_dynamic_mode() need appear in pairs
-     */
-    void close_dynamic_mode();
-
 private:
     int reserve(int64_t size);
 
@@ -136,15 +101,11 @@ private:
     char* _buf = nullptr;
     int64_t _buf_size;
 
-    int _dynamic_mode;
-    uint64_t _len_pos;
     uint32_t _field_pos = 0;
-    uint32_t _field_count = 0;
 
     char _default_buf[4096];
 };
 
-using MysqlRowTextBuffer = MysqlRowBuffer<false>;
-using MysqlRowBinaryBuffer = MysqlRowBuffer<true>;
+using MysqlRowBinaryBuffer = MysqlRowBuffer;
 
 } // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_array_serde.cpp b/be/src/vec/data_types/serde/data_type_array_serde.cpp
index ca80647344d..b0d1d9e6df0 100644
--- a/be/src/vec/data_types/serde/data_type_array_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_array_serde.cpp
@@ -347,70 +347,11 @@ Status DataTypeArraySerDe::read_column_from_arrow(IColumn& column, const arrow::
             arrow_nested_end_offset, ctz);
 }
 
-template <bool is_binary_format>
-Status DataTypeArraySerDe::_write_column_to_mysql(const IColumn& column,
-                                                  MysqlRowBuffer<is_binary_format>& result,
-                                                  int64_t row_idx_of_mysql, bool col_const,
-                                                  const FormatOptions& options) const {
-    const auto& column_array = assert_cast<const ColumnArray&>(column);
-    const auto& offsets = column_array.get_offsets();
-    const auto& data = column_array.get_data();
-    bool is_nested_string = data.is_column_string();
-    const auto row_idx_of_col_arr = index_check_const(row_idx_of_mysql, col_const);
-    result.open_dynamic_mode();
-
-    if (0 != result.push_string("[", 1)) {
-        return Status::InternalError("pack mysql buffer failed.");
-    }
-
-    const auto begin_arr_element = offsets[row_idx_of_col_arr - 1];
-    const auto end_arr_element = offsets[row_idx_of_col_arr];
-    for (auto j = begin_arr_element; j < end_arr_element; ++j) {
-        if (j != begin_arr_element) {
-            if (0 != result.push_string(options.mysql_collection_delim.c_str(),
-                                        options.mysql_collection_delim.size())) {
-                return Status::InternalError("pack mysql buffer failed.");
-            }
-        }
-        if (data.is_null_at(j)) {
-            if (0 != result.push_string(options.null_format, options.null_len)) {
-                return Status::InternalError("pack mysql buffer failed.");
-            }
-        } else {
-            if (is_nested_string && options.wrapper_len > 0) {
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-                RETURN_IF_ERROR(
-                        nested_serde->write_column_to_mysql(data, result, j, false, options));
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-            } else {
-                RETURN_IF_ERROR(
-                        nested_serde->write_column_to_mysql(data, result, j, false, options));
-            }
-        }
-    }
-    if (0 != result.push_string("]", 1)) {
-        return Status::InternalError("pack mysql buffer failed.");
-    }
-    result.close_dynamic_mode();
-    return Status::OK();
-}
-
 Status DataTypeArraySerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                        MysqlRowBinaryBuffer& row_buffer,
-                                                        int64_t row_idx, bool col_const,
+                                                        MysqlRowBinaryBuffer& result,
+                                                        int64_t row_idx_of_mysql, bool col_const,
                                                         const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeArraySerDe::write_column_to_mysql_text(const IColumn& column,
-                                                      MysqlRowTextBuffer& row_buffer,
-                                                      int64_t row_idx, bool col_const,
-                                                      const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+    return Status::NotSupported("Array type does not support write to mysql binary format");
 }
 
 Status DataTypeArraySerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
diff --git a/be/src/vec/data_types/serde/data_type_array_serde.h b/be/src/vec/data_types/serde/data_type_array_serde.h
index a1657be8558..5ce66a97fa0 100644
--- a/be/src/vec/data_types/serde/data_type_array_serde.h
+++ b/be/src/vec/data_types/serde/data_type_array_serde.h
@@ -93,10 +93,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
-
     bool write_column_to_presto_text(const IColumn& column, BufferWritable& bw,
                                      int64_t row_idx) const override;
 
@@ -131,10 +127,6 @@ public:
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
 
 private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
     template <bool is_strict_mode>
     Status _from_string(StringRef& str, IColumn& column, const FormatOptions& options) const;
 
diff --git a/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp b/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
index 93e2f48e59d..179c1336e44 100644
--- a/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_bitmap_serde.cpp
@@ -150,27 +150,11 @@ void DataTypeBitMapSerDe::read_one_cell_from_jsonb(IColumn& column, const JsonbV
     col.insert_value(bitmap_value);
 }
 
-template <bool is_binary_format>
-Status DataTypeBitMapSerDe::_write_column_to_mysql(const IColumn& column,
-                                                   MysqlRowBuffer<is_binary_format>& result,
-                                                   int64_t row_idx, bool col_const,
-                                                   const FormatOptions& options) const {
-    auto& data_column = assert_cast<const ColumnBitmap&>(column);
-    if (_return_object_as_string) {
-        const auto col_index = index_check_const(row_idx, col_const);
-        BitmapValue bitmapValue = data_column.get_element(col_index);
-        size_t size = bitmapValue.getSizeInBytes();
-        std::unique_ptr<char[]> buf = std::make_unique_for_overwrite<char[]>(size);
-        bitmapValue.write_to(buf.get());
-        if (0 != result.push_string(buf.get(), size)) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-    } else {
-        if (0 != result.push_null()) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-    }
-    return Status::OK();
+Status DataTypeBitMapSerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                         MysqlRowBinaryBuffer& result,
+                                                         int64_t row_idx, bool col_const,
+                                                         const FormatOptions& options) const {
+    return Status::NotSupported("Bitmap type does not support write to mysql binary format");
 }
 
 bool DataTypeBitMapSerDe::write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
@@ -188,20 +172,6 @@ bool DataTypeBitMapSerDe::write_column_to_mysql_text(const IColumn& column, Buff
     }
 }
 
-Status DataTypeBitMapSerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                         MysqlRowBinaryBuffer& row_buffer,
-                                                         int64_t row_idx, bool col_const,
-                                                         const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeBitMapSerDe::write_column_to_mysql_text(const IColumn& column,
-                                                       MysqlRowTextBuffer& row_buffer,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeBitMapSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
                                                 const NullMap* null_map,
                                                 orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_bitmap_serde.h b/be/src/vec/data_types/serde/data_type_bitmap_serde.h
index 482665aaaa1..3a07ad18e2b 100644
--- a/be/src/vec/data_types/serde/data_type_bitmap_serde.h
+++ b/be/src/vec/data_types/serde/data_type_bitmap_serde.h
@@ -74,9 +74,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
                                     int64_t row_idx) const override;
@@ -86,13 +83,6 @@ public:
                                int64_t start, int64_t end, vectorized::Arena& arena) const override;
 
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
-    // Bitmap is binary data which is not shown by mysql.
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 } // namespace vectorized
 } // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp
index 9c648144565..a3e3ca23b1d 100644
--- a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.cpp
@@ -251,10 +251,9 @@ Status DataTypeDateSerDe<T>::read_column_from_arrow(IColumn& column,
 }
 
 template <PrimitiveType T>
-template <bool is_binary_format>
-Status DataTypeDateSerDe<T>::_write_column_to_mysql(
-        const IColumn& column, MysqlRowBuffer<is_binary_format>& result, int64_t row_idx,
-        bool col_const, const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
+Status DataTypeDateSerDe<T>::write_column_to_mysql_binary(
+        const IColumn& column, MysqlRowBinaryBuffer& result, int64_t row_idx, bool col_const,
+        const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
     const auto& data = assert_cast<const ColumnVector<T>&>(column).get_data();
     const auto col_index = index_check_const(row_idx, col_const);
     auto time_num = data[col_index];
@@ -277,20 +276,6 @@ Status DataTypeDateSerDe<T>::_write_column_to_mysql(
     return Status::OK();
 }
 
-template <PrimitiveType T>
-Status DataTypeDateSerDe<T>::write_column_to_mysql_binary(
-        const IColumn& column, MysqlRowBinaryBuffer& row_buffer, int64_t row_idx, bool col_const,
-        const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <PrimitiveType T>
-Status DataTypeDateSerDe<T>::write_column_to_mysql_text(
-        const IColumn& column, MysqlRowTextBuffer& row_buffer, int64_t row_idx, bool col_const,
-        const typename DataTypeNumberSerDe<T>::FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 template <PrimitiveType T>
 Status DataTypeDateSerDe<T>::write_column_to_orc(const std::string& timezone, const IColumn& column,
                                                  const NullMap* null_map,
diff --git a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h
index 15d867203d8..16de6a8e46c 100644
--- a/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h
+++ b/be/src/vec/data_types/serde/data_type_date_or_datetime_serde.h
@@ -108,9 +108,6 @@ public:
             const IColumn& column, MysqlRowBinaryBuffer& row_buffer, int64_t row_idx,
             bool col_const,
             const typename DataTypeNumberSerDe<T>::FormatOptions& options) const override;
-    Status write_column_to_mysql_text(
-            const IColumn& column, MysqlRowTextBuffer& row_buffer, int64_t row_idx, bool col_const,
-            const typename DataTypeNumberSerDe<T>::FormatOptions& options) const override;
 
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -120,12 +117,6 @@ protected:
     template <bool is_date>
     Status _read_column_from_arrow(IColumn& column, const arrow::Array* arrow_array, int64_t start,
                                    int64_t end, const cctz::time_zone& ctz) const;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(
-            const IColumn& column, MysqlRowBuffer<is_binary_format>& result, int64_t row_idx,
-            bool col_const, const typename DataTypeNumberSerDe<T>::FormatOptions& options) const;
 };
 
 class DataTypeDateTimeSerDe : public DataTypeDateSerDe<PrimitiveType::TYPE_DATETIME> {
diff --git a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
index f44c5d38c40..71b7d750a25 100644
--- a/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_datetimev2_serde.cpp
@@ -424,11 +424,10 @@ Status DataTypeDateTimeV2SerDe::read_column_from_arrow(IColumn& column,
     return Status::OK();
 }
 
-template <bool is_binary_format>
-Status DataTypeDateTimeV2SerDe::_write_column_to_mysql(const IColumn& column,
-                                                       MysqlRowBuffer<is_binary_format>& result,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
+Status DataTypeDateTimeV2SerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                             MysqlRowBinaryBuffer& result,
+                                                             int64_t row_idx, bool col_const,
+                                                             const FormatOptions& options) const {
     const auto& data = assert_cast<const ColumnDateTimeV2&>(column).get_data();
     const auto col_index = index_check_const(row_idx, col_const);
     DateV2Value<DateTimeV2ValueType> date_val =
@@ -451,20 +450,6 @@ Status DataTypeDateTimeV2SerDe::_write_column_to_mysql(const IColumn& column,
     return Status::OK();
 }
 
-Status DataTypeDateTimeV2SerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                             MysqlRowBinaryBuffer& row_buffer,
-                                                             int64_t row_idx, bool col_const,
-                                                             const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeDateTimeV2SerDe::write_column_to_mysql_text(const IColumn& column,
-                                                           MysqlRowTextBuffer& row_buffer,
-                                                           int64_t row_idx, bool col_const,
-                                                           const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeDateTimeV2SerDe::write_column_to_orc(const std::string& timezone,
                                                     const IColumn& column, const NullMap* null_map,
                                                     orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_datetimev2_serde.h b/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
index 6f9f11d3cd8..7a1f4c2f52c 100644
--- a/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
+++ b/be/src/vec/data_types/serde/data_type_datetimev2_serde.h
@@ -92,9 +92,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -110,11 +107,6 @@ public:
     int get_scale() const override { return _scale; }
 
 private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
-
     int _scale;
 };
 } // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_datev2_serde.cpp b/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
index 620ac636073..eaa0ba12e4c 100644
--- a/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_datev2_serde.cpp
@@ -128,11 +128,10 @@ Status DataTypeDateV2SerDe::read_column_from_arrow(IColumn& column, const arrow:
     return Status::OK();
 }
 
-template <bool is_binary_format>
-Status DataTypeDateV2SerDe::_write_column_to_mysql(const IColumn& column,
-                                                   MysqlRowBuffer<is_binary_format>& result,
-                                                   int64_t row_idx, bool col_const,
-                                                   const FormatOptions& options) const {
+Status DataTypeDateV2SerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                         MysqlRowBinaryBuffer& result,
+                                                         int64_t row_idx, bool col_const,
+                                                         const FormatOptions& options) const {
     const auto& data = assert_cast<const ColumnDateV2&>(column).get_data();
     auto col_index = index_check_const(row_idx, col_const);
     DateV2Value<DateV2ValueType> date_val =
@@ -155,20 +154,6 @@ Status DataTypeDateV2SerDe::_write_column_to_mysql(const IColumn& column,
     return Status::OK();
 }
 
-Status DataTypeDateV2SerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                         MysqlRowBinaryBuffer& row_buffer,
-                                                         int64_t row_idx, bool col_const,
-                                                         const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeDateV2SerDe::write_column_to_mysql_text(const IColumn& column,
-                                                       MysqlRowTextBuffer& row_buffer,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeDateV2SerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
                                                 const NullMap* null_map,
                                                 orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_datev2_serde.h b/be/src/vec/data_types/serde/data_type_datev2_serde.h
index b1e7b8457bb..5a429e1dd40 100644
--- a/be/src/vec/data_types/serde/data_type_datev2_serde.h
+++ b/be/src/vec/data_types/serde/data_type_datev2_serde.h
@@ -89,9 +89,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -105,11 +102,5 @@ public:
 
     void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
                                   int64_t row_num) const override;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 } // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
index 464bf73abf8..26239e11ab7 100644
--- a/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_decimal_serde.cpp
@@ -356,11 +356,10 @@ Status DataTypeDecimalSerDe<T>::read_column_from_arrow(IColumn& column,
 }
 
 template <PrimitiveType T>
-template <bool is_binary_format>
-Status DataTypeDecimalSerDe<T>::_write_column_to_mysql(const IColumn& column,
-                                                       MysqlRowBuffer<is_binary_format>& result,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
+Status DataTypeDecimalSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
+                                                             MysqlRowBinaryBuffer& result,
+                                                             int64_t row_idx, bool col_const,
+                                                             const FormatOptions& options) const {
     auto& data = assert_cast<const ColumnDecimal<T>&>(column).get_data();
     const auto col_index = index_check_const(row_idx, col_const);
     if constexpr (T == TYPE_DECIMALV2) {
@@ -379,22 +378,6 @@ Status DataTypeDecimalSerDe<T>::_write_column_to_mysql(const IColumn& column,
     return Status::OK();
 }
 
-template <PrimitiveType T>
-Status DataTypeDecimalSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
-                                                             MysqlRowBinaryBuffer& row_buffer,
-                                                             int64_t row_idx, bool col_const,
-                                                             const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <PrimitiveType T>
-Status DataTypeDecimalSerDe<T>::write_column_to_mysql_text(const IColumn& column,
-                                                           MysqlRowTextBuffer& row_buffer,
-                                                           int64_t row_idx, bool col_const,
-                                                           const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 template <PrimitiveType T>
 Status DataTypeDecimalSerDe<T>::write_column_to_orc(const std::string& timezone,
                                                     const IColumn& column, const NullMap* null_map,
diff --git a/be/src/vec/data_types/serde/data_type_decimal_serde.h b/be/src/vec/data_types/serde/data_type_decimal_serde.h
index 3188cdd1001..16b46e842de 100644
--- a/be/src/vec/data_types/serde/data_type_decimal_serde.h
+++ b/be/src/vec/data_types/serde/data_type_decimal_serde.h
@@ -111,9 +111,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -138,11 +135,6 @@ public:
                                                       FieldInfo& info);
 
 private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
-
     int precision;
     int scale;
     const typename FieldType::NativeType scale_multiplier;
diff --git a/be/src/vec/data_types/serde/data_type_hll_serde.cpp b/be/src/vec/data_types/serde/data_type_hll_serde.cpp
index 0ccfe06257b..de6b4df77b5 100644
--- a/be/src/vec/data_types/serde/data_type_hll_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_hll_serde.cpp
@@ -147,27 +147,11 @@ Status DataTypeHLLSerDe::write_column_to_arrow(const IColumn& column, const Null
     return Status::OK();
 }
 
-template <bool is_binary_format>
-Status DataTypeHLLSerDe::_write_column_to_mysql(const IColumn& column,
-                                                MysqlRowBuffer<is_binary_format>& result,
-                                                int64_t row_idx, bool col_const,
-                                                const FormatOptions& options) const {
-    auto& data_column = assert_cast<const ColumnHLL&>(column);
-    if (_return_object_as_string) {
-        const auto col_index = index_check_const(row_idx, col_const);
-        HyperLogLog hyperLogLog = data_column.get_element(col_index);
-        size_t size = hyperLogLog.max_serialized_size();
-        std::unique_ptr<char[]> buf = std::make_unique_for_overwrite<char[]>(size);
-        hyperLogLog.serialize((uint8_t*)buf.get());
-        if (UNLIKELY(0 != result.push_string(buf.get(), size))) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-    } else {
-        if (UNLIKELY(0 != result.push_null())) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-    }
-    return Status::OK();
+Status DataTypeHLLSerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                      MysqlRowBinaryBuffer& result, int64_t row_idx,
+                                                      bool col_const,
+                                                      const FormatOptions& options) const {
+    return Status::NotSupported("Bitmap type does not support write to mysql binary format");
 }
 
 bool DataTypeHLLSerDe::write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
@@ -185,20 +169,6 @@ bool DataTypeHLLSerDe::write_column_to_mysql_text(const IColumn& column, BufferW
     }
 }
 
-Status DataTypeHLLSerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                      MysqlRowBinaryBuffer& row_buffer,
-                                                      int64_t row_idx, bool col_const,
-                                                      const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeHLLSerDe::write_column_to_mysql_text(const IColumn& column,
-                                                    MysqlRowTextBuffer& row_buffer, int64_t row_idx,
-                                                    bool col_const,
-                                                    const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeHLLSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
                                              const NullMap* null_map,
                                              orc::ColumnVectorBatch* orc_col_batch, int64_t start,
diff --git a/be/src/vec/data_types/serde/data_type_hll_serde.h b/be/src/vec/data_types/serde/data_type_hll_serde.h
index 574967b4938..363ade07157 100644
--- a/be/src/vec/data_types/serde/data_type_hll_serde.h
+++ b/be/src/vec/data_types/serde/data_type_hll_serde.h
@@ -68,9 +68,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
                                     int64_t row_idx) const override;
@@ -80,13 +77,6 @@ public:
                                int64_t start, int64_t end, vectorized::Arena& arena) const override;
 
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
-    // Hll is binary data which is not shown by mysql.
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 } // namespace vectorized
 } // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp b/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
index dec1651943c..6df33a9ec8b 100644
--- a/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_ipv4_serde.cpp
@@ -27,11 +27,10 @@
 namespace doris::vectorized {
 #include "common/compile_check_begin.h"
 
-template <bool is_binary_format>
-Status DataTypeIPv4SerDe::_write_column_to_mysql(const IColumn& column,
-                                                 MysqlRowBuffer<is_binary_format>& result,
-                                                 int64_t row_idx, bool col_const,
-                                                 const FormatOptions& options) const {
+Status DataTypeIPv4SerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                       MysqlRowBinaryBuffer& result,
+                                                       int64_t row_idx, bool col_const,
+                                                       const FormatOptions& options) const {
     auto& data = assert_cast<const ColumnIPv4&>(column).get_data();
     auto col_index = index_check_const(row_idx, col_const);
     IPv4Value ipv4_val(data[col_index]);
@@ -53,20 +52,6 @@ Status DataTypeIPv4SerDe::_write_column_to_mysql(const IColumn& column,
     return Status::OK();
 }
 
-Status DataTypeIPv4SerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                       MysqlRowBinaryBuffer& row_buffer,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeIPv4SerDe::write_column_to_mysql_text(const IColumn& column,
-                                                     MysqlRowTextBuffer& row_buffer,
-                                                     int64_t row_idx, bool col_const,
-                                                     const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeIPv4SerDe::serialize_one_cell_to_json(const IColumn& column, int64_t row_num,
                                                      BufferWritable& bw,
                                                      FormatOptions& options) const {
diff --git a/be/src/vec/data_types/serde/data_type_ipv4_serde.h b/be/src/vec/data_types/serde/data_type_ipv4_serde.h
index e9c9c2af1b2..7208477a3c8 100644
--- a/be/src/vec/data_types/serde/data_type_ipv4_serde.h
+++ b/be/src/vec/data_types/serde/data_type_ipv4_serde.h
@@ -43,9 +43,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
     Status serialize_one_cell_to_json(const IColumn& column, int64_t row_num, BufferWritable& bw,
                                       FormatOptions& options) const override;
     Status deserialize_one_cell_from_json(IColumn& column, Slice& slice,
@@ -74,11 +71,5 @@ public:
 
     void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
                                   int64_t row_num) const override;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 } // namespace doris::vectorized
diff --git a/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp b/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
index 6703d0c018c..89c6a4114f2 100644
--- a/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_ipv6_serde.cpp
@@ -31,11 +31,10 @@
 namespace doris::vectorized {
 #include "common/compile_check_begin.h"
 
-template <bool is_binary_format>
-Status DataTypeIPv6SerDe::_write_column_to_mysql(const IColumn& column,
-                                                 MysqlRowBuffer<is_binary_format>& result,
-                                                 int64_t row_idx, bool col_const,
-                                                 const FormatOptions& options) const {
+Status DataTypeIPv6SerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                       MysqlRowBinaryBuffer& result,
+                                                       int64_t row_idx, bool col_const,
+                                                       const FormatOptions& options) const {
     auto& data = assert_cast<const ColumnIPv6&>(column).get_data();
     auto col_index = index_check_const(row_idx, col_const);
     IPv6Value ipv6_val(data[col_index]);
@@ -57,20 +56,6 @@ Status DataTypeIPv6SerDe::_write_column_to_mysql(const IColumn& column,
     return Status::OK();
 }
 
-Status DataTypeIPv6SerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                       MysqlRowBinaryBuffer& row_buffer,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeIPv6SerDe::write_column_to_mysql_text(const IColumn& column,
-                                                     MysqlRowTextBuffer& row_buffer,
-                                                     int64_t row_idx, bool col_const,
-                                                     const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 void DataTypeIPv6SerDe::read_one_cell_from_jsonb(IColumn& column, const JsonbValue* arg) const {
     const auto* str_value = arg->unpack<JsonbBinaryVal>();
     column.deserialize_and_insert_from_arena(str_value->getBlob());
diff --git a/be/src/vec/data_types/serde/data_type_ipv6_serde.h b/be/src/vec/data_types/serde/data_type_ipv6_serde.h
index 4f18f43e71c..cb79451d54c 100644
--- a/be/src/vec/data_types/serde/data_type_ipv6_serde.h
+++ b/be/src/vec/data_types/serde/data_type_ipv6_serde.h
@@ -46,9 +46,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
     Status serialize_one_cell_to_json(const IColumn& column, int64_t row_num, BufferWritable& bw,
                                       FormatOptions& options) const override;
     Status deserialize_one_cell_from_json(IColumn& column, Slice& slice,
@@ -83,12 +80,6 @@ public:
 
     void write_one_cell_to_binary(const IColumn& src_column, ColumnString::Chars& chars,
                                   int64_t row_num) const override;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 } // namespace vectorized
 } // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
index 930d30dacc7..47eac3bc600 100644
--- a/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_jsonb_serde.cpp
@@ -35,11 +35,10 @@ namespace doris {
 namespace vectorized {
 #include "common/compile_check_begin.h"
 
-template <bool is_binary_format>
-Status DataTypeJsonbSerDe::_write_column_to_mysql(const IColumn& column,
-                                                  MysqlRowBuffer<is_binary_format>& result,
-                                                  int64_t row_idx, bool col_const,
-                                                  const FormatOptions& options) const {
+Status DataTypeJsonbSerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                        MysqlRowBinaryBuffer& result,
+                                                        int64_t row_idx, bool col_const,
+                                                        const FormatOptions& options) const {
     auto& data = assert_cast<const ColumnString&>(column);
     const auto col_index = index_check_const(row_idx, col_const);
     const auto jsonb_val = data.get_data_at(col_index);
@@ -57,20 +56,6 @@ Status DataTypeJsonbSerDe::_write_column_to_mysql(const IColumn& column,
     return Status::OK();
 }
 
-Status DataTypeJsonbSerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                        MysqlRowBinaryBuffer& row_buffer,
-                                                        int64_t row_idx, bool col_const,
-                                                        const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeJsonbSerDe::write_column_to_mysql_text(const IColumn& column,
-                                                      MysqlRowTextBuffer& row_buffer,
-                                                      int64_t row_idx, bool col_const,
-                                                      const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeJsonbSerDe::serialize_column_to_json(const IColumn& column, int64_t start_idx,
                                                     int64_t end_idx, BufferWritable& bw,
                                                     FormatOptions& options) const {
diff --git a/be/src/vec/data_types/serde/data_type_jsonb_serde.h b/be/src/vec/data_types/serde/data_type_jsonb_serde.h
index f53df1d07b8..8df44f5a454 100644
--- a/be/src/vec/data_types/serde/data_type_jsonb_serde.h
+++ b/be/src/vec/data_types/serde/data_type_jsonb_serde.h
@@ -44,9 +44,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
     Status write_column_to_arrow(const IColumn& column, const NullMap* null_map,
                                  arrow::ArrayBuilder* array_builder, int64_t start, int64_t end,
                                  const cctz::time_zone& ctz) const override;
@@ -89,12 +86,6 @@ public:
                                                       FieldInfo& info);
 
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 
 void convert_jsonb_to_rapidjson(const JsonbValue& val, rapidjson::Value& target,
diff --git a/be/src/vec/data_types/serde/data_type_map_serde.cpp b/be/src/vec/data_types/serde/data_type_map_serde.cpp
index 1a1068b34e3..91a63239d5e 100644
--- a/be/src/vec/data_types/serde/data_type_map_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_map_serde.cpp
@@ -419,91 +419,11 @@ Status DataTypeMapSerDe::read_column_from_arrow(IColumn& column, const arrow::Ar
     return Status::OK();
 }
 
-template <bool is_binary_format>
-Status DataTypeMapSerDe::_write_column_to_mysql(const IColumn& column,
-                                                MysqlRowBuffer<is_binary_format>& result,
-                                                int64_t row_idx, bool col_const,
-                                                const FormatOptions& options) const {
-    const auto& map_column = assert_cast<const ColumnMap&>(column);
-    const IColumn& nested_keys_column = map_column.get_keys();
-    const IColumn& nested_values_column = map_column.get_values();
-    bool is_key_string = remove_nullable(nested_keys_column.get_ptr())->is_column_string();
-    bool is_val_string = remove_nullable(nested_values_column.get_ptr())->is_column_string();
-
-    const auto col_index = index_check_const(row_idx, col_const);
-    result.open_dynamic_mode();
-    if (0 != result.push_string("{", 1)) {
-        return Status::InternalError("pack mysql buffer failed.");
-    }
-    const auto& offsets = map_column.get_offsets();
-    for (auto j = offsets[col_index - 1]; j < offsets[col_index]; ++j) {
-        if (j != offsets[col_index - 1]) {
-            if (0 != result.push_string(options.mysql_collection_delim.c_str(),
-                                        options.mysql_collection_delim.size())) {
-                return Status::InternalError("pack mysql buffer failed.");
-            }
-        }
-        if (nested_keys_column.is_null_at(j)) {
-            if (0 != result.push_string(options.null_format, options.null_len)) {
-                return Status::InternalError("pack mysql buffer failed.");
-            }
-        } else {
-            if (is_key_string && options.wrapper_len > 0) {
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-                RETURN_IF_ERROR(key_serde->write_column_to_mysql(nested_keys_column, result, j,
-                                                                 false, options));
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-            } else {
-                RETURN_IF_ERROR(key_serde->write_column_to_mysql(nested_keys_column, result, j,
-                                                                 false, options));
-            }
-        }
-        if (0 != result.push_string(&options.map_key_delim, 1)) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-        if (nested_values_column.is_null_at(j)) {
-            if (0 != result.push_string(options.null_format, options.null_len)) {
-                return Status::InternalError("pack mysql buffer failed.");
-            }
-        } else {
-            if (is_val_string && options.wrapper_len > 0) {
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-                RETURN_IF_ERROR(value_serde->write_column_to_mysql(nested_values_column, result, j,
-                                                                   false, options));
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-            } else {
-                RETURN_IF_ERROR(value_serde->write_column_to_mysql(nested_values_column, result, j,
-                                                                   false, options));
-            }
-        }
-    }
-    if (0 != result.push_string("}", 1)) {
-        return Status::InternalError("pack mysql buffer failed.");
-    }
-    result.close_dynamic_mode();
-    return Status::OK();
-}
-
 Status DataTypeMapSerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                      MysqlRowBinaryBuffer& row_buffer,
-                                                      int64_t row_idx, bool col_const,
+                                                      MysqlRowBinaryBuffer& result, int64_t row_idx,
+                                                      bool col_const,
                                                       const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeMapSerDe::write_column_to_mysql_text(const IColumn& column,
-                                                    MysqlRowTextBuffer& row_buffer, int64_t row_idx,
-                                                    bool col_const,
-                                                    const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+    return Status::NotSupported("Map type does not support write to mysql binary format");
 }
 
 Status DataTypeMapSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
diff --git a/be/src/vec/data_types/serde/data_type_map_serde.h b/be/src/vec/data_types/serde/data_type_map_serde.h
index 241564bcaf9..4d0fd4cb6f8 100644
--- a/be/src/vec/data_types/serde/data_type_map_serde.h
+++ b/be/src/vec/data_types/serde/data_type_map_serde.h
@@ -89,9 +89,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -118,11 +115,6 @@ public:
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
 
 private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
-
     template <bool is_strict_mode>
     Status _from_string(StringRef& str, IColumn& column, const FormatOptions& options) const;
 
diff --git a/be/src/vec/data_types/serde/data_type_nothing_serde.h b/be/src/vec/data_types/serde/data_type_nothing_serde.h
index a67469deec1..6d3a6e50a27 100644
--- a/be/src/vec/data_types/serde/data_type_nothing_serde.h
+++ b/be/src/vec/data_types/serde/data_type_nothing_serde.h
@@ -97,12 +97,6 @@ public:
         return Status::NotSupported("write_column_to_mysql with type " + column.get_name());
     }
 
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override {
-        return Status::NotSupported("write_column_to_mysql with type " + column.get_name());
-    }
-
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
                                int64_t start, int64_t end,
diff --git a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
index 187a5c4e27d..1668cbfcf88 100644
--- a/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_nullable_serde.cpp
@@ -401,11 +401,10 @@ bool DataTypeNullableSerDe::write_column_to_hive_text(const IColumn& column, Buf
     }
 }
 
-template <bool is_binary_format>
-Status DataTypeNullableSerDe::_write_column_to_mysql(const IColumn& column,
-                                                     MysqlRowBuffer<is_binary_format>& result,
-                                                     int64_t row_idx, bool col_const,
-                                                     const FormatOptions& options) const {
+Status DataTypeNullableSerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                           MysqlRowBinaryBuffer& result,
+                                                           int64_t row_idx, bool col_const,
+                                                           const FormatOptions& options) const {
     const auto& col = assert_cast<const ColumnNullable&>(column);
     const auto col_index = index_check_const(row_idx, col_const);
     if (col.has_null() && col.is_null_at(col_index)) {
@@ -414,26 +413,12 @@ Status DataTypeNullableSerDe::_write_column_to_mysql(const IColumn& column,
         }
     } else {
         const auto& nested_col = col.get_nested_column();
-        RETURN_IF_ERROR(nested_serde->write_column_to_mysql(nested_col, result, col_index,
-                                                            col_const, options));
+        RETURN_IF_ERROR(nested_serde->write_column_to_mysql_binary(nested_col, result, col_index,
+                                                                   col_const, options));
     }
     return Status::OK();
 }
 
-Status DataTypeNullableSerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                           MysqlRowBinaryBuffer& row_buffer,
-                                                           int64_t row_idx, bool col_const,
-                                                           const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeNullableSerDe::write_column_to_mysql_text(const IColumn& column,
-                                                         MysqlRowTextBuffer& row_buffer,
-                                                         int64_t row_idx, bool col_const,
-                                                         const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeNullableSerDe::write_column_to_orc(const std::string& timezone,
                                                   const IColumn& column, const NullMap* null_map,
                                                   orc::ColumnVectorBatch* orc_col_batch,
diff --git a/be/src/vec/data_types/serde/data_type_nullable_serde.h b/be/src/vec/data_types/serde/data_type_nullable_serde.h
index 5033f83cc67..e8ef275f2e5 100644
--- a/be/src/vec/data_types/serde/data_type_nullable_serde.h
+++ b/be/src/vec/data_types/serde/data_type_nullable_serde.h
@@ -88,9 +88,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
     bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
                                     int64_t row_idx) const override;
 
@@ -125,11 +122,6 @@ public:
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
 
 private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
-
     DataTypeSerDeSPtr nested_serde;
 };
 #include "common/compile_check_end.h"
diff --git a/be/src/vec/data_types/serde/data_type_number_serde.cpp b/be/src/vec/data_types/serde/data_type_number_serde.cpp
index 92c89ff1011..15cb6a0bb5b 100644
--- a/be/src/vec/data_types/serde/data_type_number_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_number_serde.cpp
@@ -461,11 +461,10 @@ void DataTypeNumberSerDe<T>::insert_column_last_value_multiple_times(IColumn& co
 }
 
 template <PrimitiveType T>
-template <bool is_binary_format>
-Status DataTypeNumberSerDe<T>::_write_column_to_mysql(const IColumn& column,
-                                                      MysqlRowBuffer<is_binary_format>& result,
-                                                      int64_t row_idx, bool col_const,
-                                                      const FormatOptions& options) const {
+Status DataTypeNumberSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
+                                                            MysqlRowBinaryBuffer& result,
+                                                            int64_t row_idx, bool col_const,
+                                                            const FormatOptions& options) const {
     int buf_ret = 0;
     auto& data = assert_cast<const ColumnType&>(column).get_data();
     const auto col_index = index_check_const(row_idx, col_const);
@@ -506,22 +505,6 @@ Status DataTypeNumberSerDe<T>::_write_column_to_mysql(const IColumn& column,
     }
 }
 
-template <PrimitiveType T>
-Status DataTypeNumberSerDe<T>::write_column_to_mysql_binary(const IColumn& column,
-                                                            MysqlRowBinaryBuffer& row_buffer,
-                                                            int64_t row_idx, bool col_const,
-                                                            const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <PrimitiveType T>
-Status DataTypeNumberSerDe<T>::write_column_to_mysql_text(const IColumn& column,
-                                                          MysqlRowTextBuffer& row_buffer,
-                                                          int64_t row_idx, bool col_const,
-                                                          const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 #define WRITE_INTEGRAL_COLUMN_TO_ORC(ORC_TYPE)                    \
     ORC_TYPE* cur_batch = dynamic_cast<ORC_TYPE*>(orc_col_batch); \
     for (size_t row_id = start; row_id < end; row_id++) {         \
diff --git a/be/src/vec/data_types/serde/data_type_number_serde.h b/be/src/vec/data_types/serde/data_type_number_serde.h
index c3da442d05c..cbd4c014cf6 100644
--- a/be/src/vec/data_types/serde/data_type_number_serde.h
+++ b/be/src/vec/data_types/serde/data_type_number_serde.h
@@ -119,10 +119,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
-
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
                                int64_t start, int64_t end, vectorized::Arena& arena) const override;
@@ -145,12 +141,6 @@ public:
 
     static const uint8_t* deserialize_binary_to_field(const uint8_t* data, Field& field,
                                                       FieldInfo& info);
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 
 template <PrimitiveType T>
diff --git a/be/src/vec/data_types/serde/data_type_quantilestate_serde.h b/be/src/vec/data_types/serde/data_type_quantilestate_serde.h
index 1b7c8d455eb..af9ae56ced1 100644
--- a/be/src/vec/data_types/serde/data_type_quantilestate_serde.h
+++ b/be/src/vec/data_types/serde/data_type_quantilestate_serde.h
@@ -125,15 +125,10 @@ public:
                              "read_column_from_arrow with type " + column.get_name());
     }
 
-    Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
+    Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& result,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override {
-        return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-    }
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override {
-        return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+        return Status::NotSupported("write_column_to_mysql_binary with type " + column.get_name());
     }
 
     bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
@@ -190,38 +185,7 @@ public:
         data.serialize((uint8_t*)result.data());
         bw.write(result.data(), result.size());
     }
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
-
-// QuantileState is binary data which is not shown by mysql
-template <bool is_binary_format>
-Status DataTypeQuantileStateSerDe::_write_column_to_mysql(const IColumn& column,
-                                                          MysqlRowBuffer<is_binary_format>& result,
-                                                          int64_t row_idx, bool col_const,
-                                                          const FormatOptions& options) const {
-    auto& data_column = reinterpret_cast<const ColumnQuantileState&>(column);
-
-    if (_return_object_as_string) {
-        const auto col_index = index_check_const(row_idx, col_const);
-        auto& quantile_value = const_cast<QuantileState&>(data_column.get_element(col_index));
-        size_t size = quantile_value.get_serialized_size();
-        std::unique_ptr<char[]> buf = std::make_unique_for_overwrite<char[]>(size);
-        quantile_value.serialize((uint8_t*)buf.get());
-        if (0 != result.push_string(buf.get(), size)) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-    } else {
-        if (0 != result.push_null()) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-    }
-    return Status::OK();
-}
 #include "common/compile_check_end.h"
 } // namespace vectorized
 } // namespace doris
diff --git a/be/src/vec/data_types/serde/data_type_serde.h b/be/src/vec/data_types/serde/data_type_serde.h
index 61c56cc9f82..e98460dc795 100644
--- a/be/src/vec/data_types/serde/data_type_serde.h
+++ b/be/src/vec/data_types/serde/data_type_serde.h
@@ -414,23 +414,6 @@ public:
 
     virtual void read_one_cell_from_jsonb(IColumn& column, const JsonbValue* arg) const = 0;
 
-    // MySQL serializer and deserializer
-
-    template <bool is_binary_format>
-    Status write_column_to_mysql(const IColumn& column,
-                                 MysqlRowBuffer<is_binary_format>& row_buffer, int64_t row_idx,
-                                 bool col_const, const FormatOptions& options) const {
-        if constexpr (is_binary_format) {
-            return write_column_to_mysql_binary(column, row_buffer, row_idx, col_const, options);
-        } else {
-            return write_column_to_mysql_text(column, row_buffer, row_idx, col_const, options);
-        }
-    }
-
-    virtual Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                              int64_t row_idx, bool col_const,
-                                              const FormatOptions& options) const = 0;
-
     // return true if output as string
     // return false if output null
     virtual bool write_column_to_mysql_text(const IColumn& column, BufferWritable& bw,
diff --git a/be/src/vec/data_types/serde/data_type_string_serde.cpp b/be/src/vec/data_types/serde/data_type_string_serde.cpp
index f69c7a79aa2..a6b5f765e34 100644
--- a/be/src/vec/data_types/serde/data_type_string_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_string_serde.cpp
@@ -315,19 +315,6 @@ Status DataTypeStringSerDeBase<ColumnType>::read_column_from_arrow(
     return Status::OK();
 }
 
-template <typename ColumnType>
-Status DataTypeStringSerDeBase<ColumnType>::write_column_to_mysql_binary(
-        const IColumn& column, MysqlRowBinaryBuffer& row_buffer, int64_t row_idx, bool col_const,
-        const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-template <typename ColumnType>
-Status DataTypeStringSerDeBase<ColumnType>::write_column_to_mysql_text(
-        const IColumn& column, MysqlRowTextBuffer& row_buffer, int64_t row_idx, bool col_const,
-        const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 template <typename ColumnType>
 Status DataTypeStringSerDeBase<ColumnType>::write_column_to_orc(
         const std::string& timezone, const IColumn& column, const NullMap* null_map,
diff --git a/be/src/vec/data_types/serde/data_type_string_serde.h b/be/src/vec/data_types/serde/data_type_string_serde.h
index 880a14f11c3..7f849df74cd 100644
--- a/be/src/vec/data_types/serde/data_type_string_serde.h
+++ b/be/src/vec/data_types/serde/data_type_string_serde.h
@@ -203,13 +203,14 @@ public:
     Status read_column_from_arrow(IColumn& column, const arrow::Array* arrow_array, int64_t start,
                                   int64_t end, const cctz::time_zone& ctz) const override;
 
-    Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
+    Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& result,
                                         int64_t row_idx, bool col_const,
-                                        const FormatOptions& options) const override;
-
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
+                                        const FormatOptions& options) const override {
+        const auto col_index = index_check_const(row_idx, col_const);
+        const auto string_val = assert_cast<const ColumnType&>(column).get_data_at(col_index);
+        result.push_string(string_val.data, string_val.size);
+        return Status::OK();
+    }
 
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -256,17 +257,6 @@ public:
     }
 
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const {
-        const auto col_index = index_check_const(row_idx, col_const);
-        const auto string_val = assert_cast<const ColumnType&>(column).get_data_at(col_index);
-        result.push_string(string_val.data, string_val.size);
-        return Status::OK();
-    }
 };
 
 using DataTypeStringSerDe = DataTypeStringSerDeBase<ColumnString>;
diff --git a/be/src/vec/data_types/serde/data_type_struct_serde.cpp b/be/src/vec/data_types/serde/data_type_struct_serde.cpp
index 85dd0c12eb1..f5c22d08fcd 100644
--- a/be/src/vec/data_types/serde/data_type_struct_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_struct_serde.cpp
@@ -429,81 +429,11 @@ Status DataTypeStructSerDe::read_column_from_arrow(IColumn& column, const arrow:
     return Status::OK();
 }
 
-template <bool is_binary_format>
-Status DataTypeStructSerDe::_write_column_to_mysql(const IColumn& column,
-                                                   MysqlRowBuffer<is_binary_format>& result,
-                                                   int64_t row_idx, bool col_const,
-                                                   const FormatOptions& options) const {
-    const auto& col = assert_cast<const ColumnStruct&, TypeCheckOnRelease::DISABLE>(column);
-    const auto col_index = index_check_const(row_idx, col_const);
-    result.open_dynamic_mode();
-    if (0 != result.push_string("{", 1)) {
-        return Status::InternalError("pack mysql buffer failed.");
-    }
-    bool begin = true;
-    for (size_t j = 0; j < elem_serdes_ptrs.size(); ++j) {
-        if (!begin) {
-            if (0 != result.push_string(options.mysql_collection_delim.c_str(),
-                                        options.mysql_collection_delim.size())) {
-                return Status::InternalError("pack mysql buffer failed.");
-            }
-        }
-
-        // eg: `"col_name": `
-        // eg: `col_name=`
-        std::string col_name;
-        if (options.wrapper_len > 0) {
-            col_name =
-                    options.nested_string_wrapper + elem_names[j] + options.nested_string_wrapper;
-        } else {
-            col_name = elem_names[j];
-        }
-        col_name += options.map_key_delim;
-        if (0 != result.push_string(col_name.c_str(), col_name.length())) {
-            return Status::InternalError("pack mysql buffer failed.");
-        }
-
-        if (col.get_column_ptr(j)->is_null_at(col_index)) {
-            if (0 != result.push_string(options.null_format, options.null_len)) {
-                return Status::InternalError("pack mysql buffer failed.");
-            }
-        } else {
-            if (remove_nullable(col.get_column_ptr(j))->is_column_string() &&
-                options.wrapper_len > 0) {
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-                RETURN_IF_ERROR(elem_serdes_ptrs[j]->write_column_to_mysql(
-                        col.get_column(j), result, col_index, false, options));
-                if (0 != result.push_string(options.nested_string_wrapper, options.wrapper_len)) {
-                    return Status::InternalError("pack mysql buffer failed.");
-                }
-            } else {
-                RETURN_IF_ERROR(elem_serdes_ptrs[j]->write_column_to_mysql(
-                        col.get_column(j), result, col_index, false, options));
-            }
-        }
-        begin = false;
-    }
-    if (UNLIKELY(0 != result.push_string("}", 1))) {
-        return Status::InternalError("pack mysql buffer failed.");
-    }
-    result.close_dynamic_mode();
-    return Status::OK();
-}
-
 Status DataTypeStructSerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                         MysqlRowBinaryBuffer& row_buffer,
+                                                         MysqlRowBinaryBuffer& result,
                                                          int64_t row_idx, bool col_const,
                                                          const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeStructSerDe::write_column_to_mysql_text(const IColumn& column,
-                                                       MysqlRowTextBuffer& row_buffer,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
+    return Status::NotSupported("Struct type does not support write to mysql binary format");
 }
 
 Status DataTypeStructSerDe::write_column_to_orc(const std::string& timezone, const IColumn& column,
diff --git a/be/src/vec/data_types/serde/data_type_struct_serde.h b/be/src/vec/data_types/serde/data_type_struct_serde.h
index c31d423b93c..6c7ce49b6ff 100644
--- a/be/src/vec/data_types/serde/data_type_struct_serde.h
+++ b/be/src/vec/data_types/serde/data_type_struct_serde.h
@@ -90,9 +90,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
@@ -122,16 +119,6 @@ public:
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
 
 private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, bool return_object_data_as_binary,
-                                  std::vector<MysqlRowBuffer<is_binary_format>>& result,
-                                  int64_t row_idx, int start, int end, bool col_const,
-                                  const FormatOptions& options) const;
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
-
     template <bool is_strict_mode>
     Status _from_string(StringRef& str, IColumn& column, const FormatOptions& options) const;
 
diff --git a/be/src/vec/data_types/serde/data_type_time_serde.cpp b/be/src/vec/data_types/serde/data_type_time_serde.cpp
index b726ad90e20..2e2da4ac076 100644
--- a/be/src/vec/data_types/serde/data_type_time_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_time_serde.cpp
@@ -28,22 +28,9 @@ namespace doris::vectorized {
 #include "common/compile_check_begin.h"
 
 Status DataTypeTimeV2SerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                         MysqlRowBinaryBuffer& row_buffer,
+                                                         MysqlRowBinaryBuffer& result,
                                                          int64_t row_idx, bool col_const,
                                                          const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-Status DataTypeTimeV2SerDe::write_column_to_mysql_text(const IColumn& column,
-                                                       MysqlRowTextBuffer& row_buffer,
-                                                       int64_t row_idx, bool col_const,
-                                                       const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-template <bool is_binary_format>
-Status DataTypeTimeV2SerDe::_write_column_to_mysql(const IColumn& column,
-                                                   MysqlRowBuffer<is_binary_format>& result,
-                                                   int64_t row_idx, bool col_const,
-                                                   const FormatOptions& options) const {
     const auto& data = assert_cast<const ColumnTimeV2&>(column).get_data();
     const auto col_index = index_check_const(row_idx, col_const);
     // _nesting_level >= 2 means this time is in complex type
diff --git a/be/src/vec/data_types/serde/data_type_time_serde.h b/be/src/vec/data_types/serde/data_type_time_serde.h
index 284a49927ef..8184e0eed09 100644
--- a/be/src/vec/data_types/serde/data_type_time_serde.h
+++ b/be/src/vec/data_types/serde/data_type_time_serde.h
@@ -35,9 +35,6 @@ public:
     Status write_column_to_mysql_binary(const IColumn& column, MysqlRowBinaryBuffer& row_buffer,
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
 
     Status from_string(StringRef& str, IColumn& column,
                        const FormatOptions& options) const override;
@@ -74,11 +71,6 @@ public:
     int get_scale() const override { return _scale; }
 
 private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
-
     int _scale;
 };
 #include "common/compile_check_end.h"
diff --git a/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp b/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp
index 23cf254affb..f22b0b67157 100644
--- a/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_varbinary_serde.cpp
@@ -37,24 +37,9 @@ void DataTypeVarbinarySerDe::read_one_cell_from_jsonb(IColumn& column,
 }
 
 Status DataTypeVarbinarySerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                            MysqlRowBinaryBuffer& row_buffer,
+                                                            MysqlRowBinaryBuffer& result,
                                                             int64_t row_idx, bool col_const,
                                                             const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeVarbinarySerDe::write_column_to_mysql_text(const IColumn& column,
-                                                          MysqlRowTextBuffer& row_buffer,
-                                                          int64_t row_idx, bool col_const,
-                                                          const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-template <bool is_binary_format>
-Status DataTypeVarbinarySerDe::_write_column_to_mysql(const IColumn& column,
-                                                      MysqlRowBuffer<is_binary_format>& result,
-                                                      int64_t row_idx, bool col_const,
-                                                      const FormatOptions& options) const {
     auto col_index = index_check_const(row_idx, col_const);
     auto data = assert_cast<const ColumnVarbinary&>(column).get_data()[col_index];
 
diff --git a/be/src/vec/data_types/serde/data_type_varbinary_serde.h b/be/src/vec/data_types/serde/data_type_varbinary_serde.h
index 53ad366d9ab..418ab883207 100644
--- a/be/src/vec/data_types/serde/data_type_varbinary_serde.h
+++ b/be/src/vec/data_types/serde/data_type_varbinary_serde.h
@@ -86,21 +86,11 @@ public:
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
 
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
-
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
                                int64_t start, int64_t end, vectorized::Arena& arena) const override;
 
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 
 #include "common/compile_check_end.h"
diff --git a/be/src/vec/data_types/serde/data_type_variant_serde.cpp b/be/src/vec/data_types/serde/data_type_variant_serde.cpp
index 7acd58889d8..8ec3e5d2a90 100644
--- a/be/src/vec/data_types/serde/data_type_variant_serde.cpp
+++ b/be/src/vec/data_types/serde/data_type_variant_serde.cpp
@@ -40,12 +40,10 @@ namespace doris {
 namespace vectorized {
 #include "common/compile_check_begin.h"
 
-template <bool is_binary_format>
-
-Status DataTypeVariantSerDe::_write_column_to_mysql(const IColumn& column,
-                                                    MysqlRowBuffer<is_binary_format>& row_buffer,
-                                                    int64_t row_idx, bool col_const,
-                                                    const FormatOptions& options) const {
+Status DataTypeVariantSerDe::write_column_to_mysql_binary(const IColumn& column,
+                                                          MysqlRowBinaryBuffer& row_buffer,
+                                                          int64_t row_idx, bool col_const,
+                                                          const FormatOptions& options) const {
     const auto& variant = assert_cast<const ColumnVariant&>(column);
     // Serialize hierarchy types to json format
     std::string buffer;
@@ -54,20 +52,6 @@ Status DataTypeVariantSerDe::_write_column_to_mysql(const IColumn& column,
     return Status::OK();
 }
 
-Status DataTypeVariantSerDe::write_column_to_mysql_binary(const IColumn& column,
-                                                          MysqlRowBinaryBuffer& row_buffer,
-                                                          int64_t row_idx, bool col_const,
-                                                          const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
-Status DataTypeVariantSerDe::write_column_to_mysql_text(const IColumn& column,
-                                                        MysqlRowTextBuffer& row_buffer,
-                                                        int64_t row_idx, bool col_const,
-                                                        const FormatOptions& options) const {
-    return _write_column_to_mysql(column, row_buffer, row_idx, col_const, options);
-}
-
 Status DataTypeVariantSerDe::serialize_column_to_json(const IColumn& column, int64_t start_idx,
                                                       int64_t end_idx, BufferWritable& bw,
                                                       FormatOptions& options) const {
diff --git a/be/src/vec/data_types/serde/data_type_variant_serde.h b/be/src/vec/data_types/serde/data_type_variant_serde.h
index bb03aa97229..7840be02e79 100644
--- a/be/src/vec/data_types/serde/data_type_variant_serde.h
+++ b/be/src/vec/data_types/serde/data_type_variant_serde.h
@@ -76,20 +76,10 @@ public:
                                         int64_t row_idx, bool col_const,
                                         const FormatOptions& options) const override;
 
-    Status write_column_to_mysql_text(const IColumn& column, MysqlRowTextBuffer& row_buffer,
-                                      int64_t row_idx, bool col_const,
-                                      const FormatOptions& options) const override;
-
     Status write_column_to_orc(const std::string& timezone, const IColumn& column,
                                const NullMap* null_map, orc::ColumnVectorBatch* orc_col_batch,
                                int64_t start, int64_t end, vectorized::Arena& arena) const override;
     void to_string(const IColumn& column, size_t row_num, BufferWritable& bw) const override;
-
-private:
-    template <bool is_binary_format>
-    Status _write_column_to_mysql(const IColumn& column, MysqlRowBuffer<is_binary_format>& result,
-                                  int64_t row_idx, bool col_const,
-                                  const FormatOptions& options) const;
 };
 #include "common/compile_check_end.h"
 } // namespace vectorized
diff --git a/be/src/vec/sink/vmysql_result_writer.cpp b/be/src/vec/sink/vmysql_result_writer.cpp
index 9f6a2af472c..8d255b9c54a 100644
--- a/be/src/vec/sink/vmysql_result_writer.cpp
+++ b/be/src/vec/sink/vmysql_result_writer.cpp
@@ -33,9 +33,11 @@
 #include "common/cast_set.h"
 #include "common/compiler_util.h" // IWYU pragma: keep
 #include "common/config.h"
+#include "runtime/define_primitive_type.h"
 #include "runtime/result_block_buffer.h"
 #include "runtime/runtime_state.h"
 #include "runtime/types.h"
+#include "udf/udf.h"
 #include "util/mysql_global.h"
 #include "vec/aggregate_functions/aggregate_function.h"
 #include "vec/columns/column.h"
@@ -174,43 +176,6 @@ Status VMysqlResultWriter<is_binary_format>::_set_options(
     }
     return Status::OK();
 }
-
-void direct_write_to_mysql_result_string(std::string& mysql_rows, const char* str, size_t size) {
-    // MySQL protocol length encoding:
-    // <= 250: 1 byte for length
-    // < 65536: 1 byte (252) + 2 bytes for length
-    // < 16777216: 1 byte (253) + 3 bytes for length
-    // >= 16777216: 1 byte (254) + 8 bytes for length
-
-    char buf[16];
-    if (size < 251ULL) {
-        int1store(buf, size);
-        mysql_rows.append(buf, 1);
-    } else if (size < 65536ULL) {
-        buf[0] = static_cast<char>(252);
-        uint16_t temp16 = static_cast<uint16_t>(size);
-        memcpy(buf + 1, &temp16, sizeof(temp16));
-        mysql_rows.append(buf, 3);
-    } else if (size < 16777216ULL) {
-        buf[0] = static_cast<char>(253);
-        int3store(buf + 1, size);
-        mysql_rows.append(buf, 4);
-    } else {
-        buf[0] = static_cast<char>(254);
-        uint64_t temp64 = static_cast<uint64_t>(size);
-        memcpy(buf + 1, &temp64, sizeof(temp64));
-        mysql_rows.append(buf, 9);
-    }
-
-    // Append string content
-    mysql_rows.append(str, size);
-}
-
-void direct_write_to_mysql_result_null(std::string& mysql_rows) {
-    // MySQL protocol for NULL value is a single byte with value 251
-    mysql_rows.push_back(static_cast<char>(251));
-}
-
 template <bool is_binary_format>
 Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* state, Block& block) {
     Status status = Status::OK();
@@ -221,15 +186,12 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
     uint64_t bytes_sent = 0;
     {
         SCOPED_TIMER(_convert_tuple_timer);
-        MysqlRowBuffer<is_binary_format> row_buffer;
-        if constexpr (is_binary_format) {
-            row_buffer.start_binary_row(_output_vexpr_ctxs.size());
-        }
 
         struct Arguments {
             const IColumn* column;
             bool is_const;
             DataTypeSerDeSPtr serde;
+            PrimitiveType type;
         };
 
         const size_t num_cols = _output_vexpr_ctxs.size();
@@ -256,7 +218,8 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
                 serde = block.get_by_position(col_idx).type->get_serde();
             }
             serde->set_return_object_as_string(output_object_data());
-            arguments.emplace_back(column_ptr.get(), col_const, serde);
+            arguments.emplace_back(column_ptr.get(), col_const, serde,
+                                   block.get_by_position(col_idx).type->get_primitive_type());
         }
 
         for (size_t col_idx = 0; col_idx < num_cols; ++col_idx) {
@@ -272,6 +235,8 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
         auto mysql_output_tmp_col = ColumnString::create();
         BufferWriter write_buffer(*mysql_output_tmp_col);
         size_t write_buffer_index = 0;
+        // For non-binary format, we need to call different serialization interfaces
+        // write_column_to_mysql/presto/hive text
         if (!is_binary_format) {
             const auto& serde_dialect = state->query_options().serde_dialect;
             auto write_to_text = [serde_dialect](DataTypeSerDeSPtr& serde, const IColumn* column,
@@ -304,20 +269,43 @@ Status VMysqlResultWriter<is_binary_format>::_write_one_block(RuntimeState* stat
                 bytes_sent += mysql_rows.size();
             }
         } else {
+            MysqlRowBinaryBuffer row_buffer;
+
+            row_buffer.start_binary_row(_output_vexpr_ctxs.size());
+
             for (int row_idx = 0; row_idx < num_rows; ++row_idx) {
                 for (size_t col_idx = 0; col_idx < num_cols; ++col_idx) {
-                    RETURN_IF_ERROR(arguments[col_idx].serde->write_column_to_mysql(
-                            *(arguments[col_idx].column), row_buffer, row_idx,
-                            arguments[col_idx].is_const, _options));
+                    auto type = arguments[col_idx].type;
+                    if (type == PrimitiveType::TYPE_ARRAY || type == PrimitiveType::TYPE_MAP ||
+                        type == PrimitiveType::TYPE_STRUCT ||
+                        type == PrimitiveType::TYPE_QUANTILE_STATE ||
+                        type == PrimitiveType::TYPE_HLL || type == PrimitiveType::TYPE_BITMAP) {
+                        // Complex types are not supported in binary format yet
+                        // So use text format serialization interface here
+                        const auto col_index =
+                                index_check_const(row_idx, arguments[col_idx].is_const);
+                        const auto* column = arguments[col_idx].column;
+                        if (arguments[col_idx].serde->write_column_to_mysql_text(
+                                    *column, write_buffer, col_index)) {
+                            write_buffer.commit();
+                            auto str = mysql_output_tmp_col->get_data_at(write_buffer_index);
+                            row_buffer.push_string(str.data, str.size);
+                            write_buffer_index++;
+                        } else {
+                            row_buffer.push_null();
+                        }
+
+                    } else {
+                        RETURN_IF_ERROR(arguments[col_idx].serde->write_column_to_mysql_binary(
+                                *(arguments[col_idx].column), row_buffer, row_idx,
+                                arguments[col_idx].is_const, _options));
+                    }
                 }
 
-                // copy MysqlRowBuffer to Thrift
                 result->result_batch.rows[row_idx].append(row_buffer.buf(), row_buffer.length());
                 bytes_sent += row_buffer.length();
                 row_buffer.reset();
-                if constexpr (is_binary_format) {
-                    row_buffer.start_binary_row(_output_vexpr_ctxs.size());
-                }
+                row_buffer.start_binary_row(_output_vexpr_ctxs.size());
             }
         }
     }
diff --git a/be/src/vec/sink/writer/vfile_result_writer.cpp b/be/src/vec/sink/writer/vfile_result_writer.cpp
index 43b23f08842..6200eade979 100644
--- a/be/src/vec/sink/writer/vfile_result_writer.cpp
+++ b/be/src/vec/sink/writer/vfile_result_writer.cpp
@@ -56,6 +56,7 @@
 #include "vec/core/block.h"
 #include "vec/exprs/vexpr.h"
 #include "vec/exprs/vexpr_context.h"
+#include "vec/functions/cast/cast_to_string.h"
 #include "vec/runtime/vcsv_transformer.h"
 #include "vec/runtime/vorc_transformer.h"
 #include "vec/runtime/vparquet_transformer.h"
@@ -288,6 +289,12 @@ Status VFileResultWriter::_close_file_writer(bool done) {
     return Status::OK();
 }
 
+template <typename SRC>
+void direct_write_to_mysql_result_int(std::string& mysql_rows, const SRC& value) {
+    auto str = CastToString::from_number(value);
+    direct_write_to_mysql_result_string(mysql_rows, str.c_str(), str.size());
+}
+
 Status VFileResultWriter::_send_result() {
     if (_is_result_sent) {
         return Status::OK();
@@ -302,29 +309,30 @@ Status VFileResultWriter::_send_result() {
     // | WriteTimeSec    | Varchar |
     // | WriteSpeedKB    | Varchar |
     // The type of these field should be consistent with types defined in OutFileClause.java of FE.
-    MysqlRowBuffer<> row_buffer;
-    row_buffer.push_int(_file_idx);                         // FileNumber
-    row_buffer.push_bigint(_written_rows_counter->value()); // TotalRows
-    row_buffer.push_bigint(_written_data_bytes->value());   // FileSize
+
+    auto result = std::make_shared<TFetchDataResult>();
+    result->result_batch.rows.resize(1);
+    auto& mysql_output = result->result_batch.rows[0];
+
+    direct_write_to_mysql_result_int(mysql_output, _file_idx);                      // FileNumber
+    direct_write_to_mysql_result_int(mysql_output, _written_rows_counter->value()); // TotalRows
+    direct_write_to_mysql_result_int(mysql_output, _written_data_bytes->value());   // FileSize
     std::string file_url;
     _get_file_url(&file_url);
     std::stringstream ss;
     ss << file_url << "*";
     file_url = ss.str();
-    row_buffer.push_string(file_url.c_str(), file_url.length()); // URL
+    direct_write_to_mysql_result_string(mysql_output, file_url.c_str(),
+                                        file_url.length()); // URL
     double write_time = _file_write_timer->value() / nons_to_second;
     std::string formatted_write_time = fmt::format("{:.3f}", write_time);
-    row_buffer.push_string(formatted_write_time.c_str(),
-                           formatted_write_time.length()); // WriteTimeSec
+    direct_write_to_mysql_result_string(mysql_output, formatted_write_time.c_str(),
+                                        formatted_write_time.length()); // WriteTimeSec
 
     double write_speed = _get_write_speed(_written_data_bytes->value(), _file_write_timer->value());
     std::string formatted_write_speed = fmt::format("{:.2f}", write_speed);
-    row_buffer.push_string(formatted_write_speed.c_str(),
-                           formatted_write_speed.length()); // WriteSpeedKB
-
-    auto result = std::make_shared<TFetchDataResult>();
-    result->result_batch.rows.resize(1);
-    result->result_batch.rows[0].assign(row_buffer.buf(), row_buffer.length());
+    direct_write_to_mysql_result_string(mysql_output, formatted_write_speed.c_str(),
+                                        formatted_write_speed.length()); // WriteSpeedKB
 
     std::map<std::string, std::string> attach_infos;
     attach_infos.insert(std::make_pair("FileNumber", std::to_string(_file_idx)));
diff --git a/be/test/util/mysql_row_buffer_test.cpp b/be/test/util/mysql_row_buffer_test.cpp
index 7f81d0031a0..328e64a5956 100644
--- a/be/test/util/mysql_row_buffer_test.cpp
+++ b/be/test/util/mysql_row_buffer_test.cpp
@@ -27,125 +27,8 @@
 
 namespace doris {
 
-TEST(MysqlRowBufferTest, basic) {
-    MysqlRowBuffer mrb;
-
-    std::string s("test");
-    mrb.push_tinyint(5);
-    mrb.push_smallint(120);
-    mrb.push_int(-30000);
-    mrb.push_bigint(900000);
-    mrb.push_unsigned_bigint(90000000);
-    mrb.push_float(56.45);
-    mrb.push_double(10.12);
-    mrb.push_string(s.c_str(), 4);
-    mrb.push_null();
-
-    const char* buf = mrb.buf();
-
-    // mem: size-data-size-data
-    // 1-'5'-3-'120'-6-'-30000'-6-'900000'-8-'90000000'-5-'56.45'-5-'10.12'-4-'test'-251
-    // 1b-1b-1b-3b--1b-----6b--1b----6b---1b-----8b----1b---5b---1b---5b---1b---4b---1b
-    // 0  1  2  3   6      7   13    14   20     21    29   30   35   36   41   42   46
-    EXPECT_EQ(47, mrb.length());
-
-    EXPECT_EQ(1, *((int8_t*)(buf)));
-    EXPECT_EQ(0, strncmp(buf + 1, "5", 1));
-
-    EXPECT_EQ(3, *((int8_t*)(buf + 2)));
-    EXPECT_EQ(0, strncmp(buf + 3, "120", 3));
-
-    EXPECT_EQ(6, *((int8_t*)(buf + 6)));
-    EXPECT_EQ(0, strncmp(buf + 7, "-30000", 6));
-
-    EXPECT_EQ(6, *((int8_t*)(buf + 13)));
-    EXPECT_EQ(0, strncmp(buf + 14, "900000", 6));
-
-    EXPECT_EQ(8, *((int8_t*)(buf + 20)));
-    EXPECT_EQ(0, strncmp(buf + 21, "90000000", 8));
-
-    EXPECT_EQ(5, *((int8_t*)(buf + 29)));
-    EXPECT_EQ(0, strncmp(buf + 30, "56.45", 5));
-
-    EXPECT_EQ(5, *((int8_t*)(buf + 35)));
-    EXPECT_EQ(0, strncmp(buf + 36, "10.12", 5));
-
-    EXPECT_EQ(4, *((int8_t*)(buf + 41)));
-    EXPECT_EQ(0, strncmp(buf + 42, "test", 4));
-
-    EXPECT_EQ(251, *((uint8_t*)(buf + 46)));
-}
-
-TEST(MysqlRowBufferTest, dynamic_mode) {
-    MysqlRowBuffer mrb;
-
-    mrb.open_dynamic_mode();
-
-    std::string s("test");
-    mrb.push_tinyint(5);
-    mrb.push_smallint(120);
-    mrb.push_int(-30000);
-    mrb.push_bigint(900000);
-    mrb.push_unsigned_bigint(90000000);
-    mrb.push_float(56.45);
-    mrb.push_double(10.12);
-    mrb.push_string(s.c_str(), 4);
-    mrb.push_null();
-
-    mrb.close_dynamic_mode();
-
-    const char* buf = mrb.buf();
-
-    // mem: size-data-data
-    // 254-48-'5'-'120'-'-30000'-'900000'-'90000000'-'56.45'-'10.12'-'test'-''
-    // 1b--8b-1b----3b-----6b-------6b--------8b-------5b------5b------4b---0b
-    // 0   1  9     10     13       19        25       33      38      43   47
-    EXPECT_EQ(47, mrb.length());
-
-    EXPECT_EQ(254, *((uint8_t*)(buf)));
-    EXPECT_EQ(38, *((int64_t*)(buf + 1)));
-
-    EXPECT_EQ(0, strncmp(buf + 9, "5", 1));
-    EXPECT_EQ(0, strncmp(buf + 10, "120", 3));
-    EXPECT_EQ(0, strncmp(buf + 13, "-30000", 6));
-    EXPECT_EQ(0, strncmp(buf + 19, "900000", 6));
-    EXPECT_EQ(0, strncmp(buf + 25, "90000000", 8));
-    EXPECT_EQ(0, strncmp(buf + 33, "56.45", 5));
-    EXPECT_EQ(0, strncmp(buf + 38, "10.12", 5));
-    EXPECT_EQ(0, strncmp(buf + 43, "test", 4));
-}
-
-TEST(MysqlRowBufferTest, dynamic_mode_mix) {
-    MysqlRowBuffer mrb;
-    int count = 585;
-    // Each small int -32767 will occupy 7 bytes, 585 * 7 = 4095
-    for (int i = 0; i < count; ++i) {
-        mrb.push_smallint(-32767);
-    }
-
-    mrb.open_dynamic_mode();
-    mrb.push_string("{", 1);
-    mrb.close_dynamic_mode();
-
-    // 4095 + 9 + 1
-    EXPECT_EQ(4105, mrb.length());
-
-    const char* buf = mrb.buf();
-    for (int i = 0; i < count; ++i) {
-        EXPECT_EQ(6, *((uint8_t*)(buf)));
-        ++buf;
-        EXPECT_EQ(0, strncmp(buf, "-32767", 6));
-        buf += 6;
-    }
-    EXPECT_EQ(254, *((uint8_t*)(buf)));
-    ++buf;
-    EXPECT_EQ(1, *((int64_t*)(buf)));
-    buf += 8;
-    EXPECT_EQ(0, strncmp(buf, "{", 1));
-}
-
 TEST(MysqlRowBufferTest, TestBinaryTimeCompressedEncoding) {
-    MysqlRowBuffer<true> buffer;
+    MysqlRowBinaryBuffer buffer;
     const char* buf = nullptr;
     size_t offset = 0;
 
diff --git a/be/test/vec/data_types/common_data_type_serder_test.h b/be/test/vec/data_types/common_data_type_serder_test.h
index 0f5c20f9614..ae0756c278c 100644
--- a/be/test/vec/data_types/common_data_type_serder_test.h
+++ b/be/test/vec/data_types/common_data_type_serder_test.h
@@ -311,20 +311,6 @@ public:
         }
     }
 
-    // assert mysql text format, now we just simple assert not to fatal or exception here
-    static void assert_mysql_format(MutableColumns& load_cols, DataTypeSerDeSPtrs serders) {
-        MysqlRowBuffer<false> row_buffer;
-        for (size_t i = 0; i < load_cols.size(); ++i) {
-            auto& col = load_cols[i];
-            for (size_t j = 0; j < col->size(); ++j) {
-                Status st;
-                EXPECT_NO_FATAL_FAILURE(
-                        st = serders[i]->write_column_to_mysql(*col, row_buffer, j, false, {}));
-                EXPECT_TRUE(st.ok()) << st.to_string();
-            }
-        }
-    }
-
     // assert arrow serialize
     static void assert_arrow_format(MutableColumns& load_cols, DataTypes types) {
         // make a block to write to arrow
diff --git a/be/test/vec/data_types/data_type_array_test.cpp b/be/test/vec/data_types/data_type_array_test.cpp
index 7ccdc64a90b..bea6604dfbd 100644
--- a/be/test/vec/data_types/data_type_array_test.cpp
+++ b/be/test/vec/data_types/data_type_array_test.cpp
@@ -485,11 +485,6 @@ TEST_F(DataTypeArrayTest, SerdeJsonbTest) {
     CommonDataTypeSerdeTest::assert_jsonb_format(array_columns, serdes);
 }
 
-TEST_F(DataTypeArrayTest, SerdeMysqlTest) {
-    // insert from data csv and assert insert result
-    CommonDataTypeSerdeTest::assert_mysql_format(array_columns, serdes);
-}
-
 TEST_F(DataTypeArrayTest, SerializeDeserializeTest) {
     // insert from data csv and assert insert result
     CommonDataTypeTest::serialize_deserialize_assert(array_columns, array_types);
diff --git a/be/test/vec/data_types/data_type_ip_test.cpp b/be/test/vec/data_types/data_type_ip_test.cpp
index 5ca0ff18798..ef4cbe17914 100644
--- a/be/test/vec/data_types/data_type_ip_test.cpp
+++ b/be/test/vec/data_types/data_type_ip_test.cpp
@@ -233,23 +233,6 @@ TEST_F(DataTypeIPTest, SerdeJsonbTest) {
                                         CommonDataTypeSerdeTest::assert_jsonb_format);
 }
 
-TEST_F(DataTypeIPTest, SerdeMysqlAndArrowTest) {
-    auto serde_ipv4 = dt_ipv4->get_serde(1);
-    auto serde_ipv6 = dt_ipv6->get_serde(1);
-    auto column_ipv4 = dt_ipv4->create_column();
-    auto column_ipv6 = dt_ipv6->create_column();
-
-    // insert from data csv and assert insert result
-    MutableColumns ip_cols;
-    ip_cols.push_back(column_ipv4->get_ptr());
-    ip_cols.push_back(column_ipv6->get_ptr());
-    DataTypeSerDeSPtrs serde = {dt_ipv4->get_serde(), dt_ipv6->get_serde()};
-    CommonDataTypeSerdeTest::check_data(ip_cols, serde, ';', {1, 2}, data_files[0],
-                                        CommonDataTypeSerdeTest::assert_mysql_format);
-
-    CommonDataTypeSerdeTest::assert_arrow_format(ip_cols, {dt_ipv4, dt_ipv6});
-}
-
 TEST_F(DataTypeIPTest, SerdeTOJsonInComplex) {
     // make array<ip>
     auto array_ipv4 = std::make_shared<DataTypeArray>(dt_ipv4);
diff --git a/be/test/vec/data_types/datetime_round_test.cpp b/be/test/vec/data_types/datetime_round_test.cpp
index edec6a7e4bf..bf680781a6f 100644
--- a/be/test/vec/data_types/datetime_round_test.cpp
+++ b/be/test/vec/data_types/datetime_round_test.cpp
@@ -90,37 +90,6 @@ static void from_thrift_checker(UInt32 scale, const String& input, const String&
     EXPECT_EQ(datetime_ptr->to_string(*column, 1), expected);
 }
 
-static void serialization_checker(UInt32 scale, const std::string& input,
-                                  const std::string& expected) {
-    std::shared_ptr<const DataTypeDateTimeV2> datetime_ptr =
-            std::dynamic_pointer_cast<const DataTypeDateTimeV2>(
-                    DataTypeFactory::instance().create_data_type(
-                            doris::FieldType::OLAP_FIELD_TYPE_DATETIMEV2, 0, scale));
-
-    StringRef rb(const_cast<char*>(input.c_str()), input.size());
-    ColumnDateTimeV2::MutablePtr column = ColumnDateTimeV2::create(0);
-    auto rt = datetime_ptr->from_string(rb, &(*column));
-    EXPECT_TRUE(rt.ok());
-    auto serde = std::dynamic_pointer_cast<DataTypeDateTimeV2SerDe>(datetime_ptr->get_serde());
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    rt = serde->write_column_to_mysql(*column, mysql_rb, 0, false, options);
-    EXPECT_TRUE(rt.ok());
-    auto elem_size = static_cast<uint8_t>(*mysql_rb.buf());
-    if (elem_size != expected.size()) {
-        std::cerr << "Left size " << elem_size << " right size " << expected.size() << " left str "
-                  << std::string_view(mysql_rb.buf() + 1, elem_size) << " right str " << expected
-                  << std::endl;
-        ASSERT_TRUE(false); // terminate ut
-    }
-    EXPECT_EQ(std::string_view(mysql_rb.buf() + 1, expected.size()), expected);
-}
-
 static std::multimap<size_t /*scale*/,
                      std::multimap<std::string /*input*/, std::string /*expected*/>>
         scale_with_input_and_expected = {
@@ -412,14 +381,4 @@ TEST(DatetimeRountTest, test_datetime_round_behaviour_get_field) {
         }
     }
 }
-
-TEST(DatetimeRountTest, test_datetime_round_behaviour_serialize) {
-    {
-        for (auto itr : scale_with_input_and_expected) {
-            for (const auto& [input, expected] : itr.second) {
-                serialization_checker(itr.first, input, expected);
-            }
-        }
-    }
-}
 } // namespace doris::vectorized
diff --git a/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp b/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp
index 34198774ba7..895efd0efc3 100644
--- a/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_jsonb_serde_test.cpp
@@ -184,21 +184,12 @@ TEST_F(DataTypeJsonbSerDeTest, serdes) {
                 EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j));
             }
         }
-        {
-            // test write_column_to_mysql
-            MysqlRowBuffer<false> mysql_rb;
-            for (int row_idx = 0; row_idx < row_count; ++row_idx) {
-                auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
-                                                      option);
-                EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
-            }
-        }
         {
             // test write_column_to_mysql with binary format
-            MysqlRowBuffer<true> mysql_rb;
+            MysqlRowBinaryBuffer mysql_rb;
             for (int row_idx = 0; row_idx < row_count; ++row_idx) {
-                auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
-                                                      option);
+                auto st = serde.write_column_to_mysql_binary(*source_column, mysql_rb, row_idx,
+                                                             false, option);
                 EXPECT_TRUE(st.ok())
                         << "Failed to write column to mysql with binary format: " << st;
             }
diff --git a/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp b/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp
index 05c5a72827f..70cf6158640 100644
--- a/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_agg_state_test.cpp
@@ -42,60 +42,6 @@ public:
             datatype_agg_state_hll_union->get_serde();
 };
 
-TEST_F(AggStateSerdeTest, writeColumnToMysql) {
-    auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
-    column_fixed_length->insert_default();
-    ASSERT_EQ(column_fixed_length->size(), 1);
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    datatype_agg_state_serde_count->set_return_object_as_string(true);
-    auto st = datatype_agg_state_serde_count->write_column_to_mysql(*column_fixed_length, mysql_rb,
-                                                                    0, false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 9);
-
-    column_fixed_length->resize(2);
-    *((int64_t*)&(column_fixed_length->get_data()[column_fixed_length->item_size()])) = 22;
-    datatype_agg_state_serde_count->set_return_object_as_string(true);
-    st = datatype_agg_state_serde_count->write_column_to_mysql(*column_fixed_length, mysql_rb, 1,
-                                                               false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 18);
-    std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
-TEST_F(AggStateSerdeTest, writeColumnToMysql2) {
-    auto column_string = ColumnString::create();
-    column_string->insert_default();
-    ASSERT_EQ(column_string->size(), 1);
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    datatype_agg_state_serde_hll_union->set_return_object_as_string(true);
-    auto st = datatype_agg_state_serde_hll_union->write_column_to_mysql(*column_string, mysql_rb, 0,
-                                                                        false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 1);
-
-    std::string str = "123";
-    column_string->insert_data(str.c_str(), str.size());
-    datatype_agg_state_serde_hll_union->set_return_object_as_string(true);
-    st = datatype_agg_state_serde_hll_union->write_column_to_mysql(*column_string, mysql_rb, 1,
-                                                                   false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 5);
-    std::cout << "test write_column_to_mysql2 success" << std::endl;
-}
-
 TEST_F(AggStateSerdeTest, writeOneCellToJsonb) {
     auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
     column_fixed_length->resize(1);
diff --git a/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp b/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp
index d330dcd8dba..2987d6c9a35 100644
--- a/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_bitmap_test.cpp
@@ -26,31 +26,6 @@
 
 namespace doris::vectorized {
 
-TEST(BitmapSerdeTest, writeColumnToMysql) {
-    auto bitmap_serde = std::make_shared<vectorized::DataTypeBitMapSerDe>(1);
-    auto column_bitmap = ColumnBitmap::create();
-    column_bitmap->insert_value(BitmapValue::empty_bitmap());
-    ASSERT_EQ(column_bitmap->size(), 1);
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    bitmap_serde->set_return_object_as_string(true);
-    auto st = bitmap_serde->write_column_to_mysql(*column_bitmap, mysql_rb, 0, false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 2);
-
-    column_bitmap->insert_value(BitmapValue(123));
-    bitmap_serde->set_return_object_as_string(true);
-    st = bitmap_serde->write_column_to_mysql(*column_bitmap, mysql_rb, 1, false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 8);
-    std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
 TEST(BitmapSerdeTest, writeOneCellToJsonb) {
     auto bitmap_serde = std::make_shared<vectorized::DataTypeBitMapSerDe>(1);
     auto column_bitmap = ColumnBitmap::create();
diff --git a/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp b/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp
index b7b0b1ab94b..fa5a0729164 100644
--- a/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_datetime_v1_test.cpp
@@ -177,15 +177,6 @@ TEST_F(DataTypeDateTimeV1SerDeTest, serdes) {
                 EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j));
             }
         }
-        {
-            // test write_column_to_mysql
-            MysqlRowBuffer<false> mysql_rb;
-            for (int row_idx = 0; row_idx < row_count; ++row_idx) {
-                auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
-                                                      option);
-                EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
-            }
-        }
     };
     test_func(*serde_date_v1, column_date_v1);
     test_func(*serde_datetime_v1, column_datetime_v1_0);
diff --git a/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp b/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp
index 6226d5cfd4f..31661c2441e 100644
--- a/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_datetime_v2_test.cpp
@@ -204,15 +204,6 @@ TEST_F(DataTypeDateTimeV2SerDeTest, serdes) {
                 EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j));
             }
         }
-        {
-            // test write_column_to_mysql
-            MysqlRowBuffer<false> mysql_rb;
-            for (int row_idx = 0; row_idx < row_count; ++row_idx) {
-                auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
-                                                      option);
-                EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
-            }
-        }
     };
     test_func(*serde_datetime_v2_0, column_datetime_v2_0);
     test_func(*serde_datetime_v2_5, column_datetime_v2_5);
diff --git a/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp b/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp
index 697272ef847..1be5a6befba 100644
--- a/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_decimal_test.cpp
@@ -263,15 +263,6 @@ TEST_F(DataTypeDecimalSerDeTest, serdes) {
                 EXPECT_EQ(deser_col_with_type->get_element(j), source_column->get_element(j));
             }
         }
-        {
-            // test write_column_to_mysql
-            MysqlRowBuffer<false> mysql_rb;
-            for (int row_idx = 0; row_idx < row_count; ++row_idx) {
-                auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
-                                                      option);
-                EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
-            }
-        }
     };
     test_func(*serde_decimal32_1, column_decimal32_1);
     test_func(*serde_decimal32_2, column_decimal32_2);
diff --git a/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp b/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp
index edad97d0254..d7e2a84208c 100644
--- a/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_fixed_length_object_test.cpp
@@ -25,34 +25,6 @@
 
 namespace doris::vectorized {
 
-TEST(FixedLengthObjectSerdeTest, writeColumnToMysql) {
-    auto fixed_length_serde = std::make_shared<vectorized::DataTypeFixedLengthObjectSerDe>(1);
-    auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
-    column_fixed_length->insert_default();
-    ASSERT_EQ(column_fixed_length->size(), 1);
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    fixed_length_serde->set_return_object_as_string(true);
-    auto st = fixed_length_serde->write_column_to_mysql(*column_fixed_length, mysql_rb, 0, false,
-                                                        options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 9);
-
-    column_fixed_length->resize(2);
-    *((int64_t*)&(column_fixed_length->get_data()[column_fixed_length->item_size()])) = 22;
-    fixed_length_serde->set_return_object_as_string(true);
-    st = fixed_length_serde->write_column_to_mysql(*column_fixed_length, mysql_rb, 1, false,
-                                                   options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 18);
-    std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
 TEST(FixedLengthObjectSerdeTest, writeOneCellToJsonb) {
     auto fixed_length_serde = std::make_shared<vectorized::DataTypeFixedLengthObjectSerDe>(1);
     auto column_fixed_length = ColumnFixedLengthObject::create(sizeof(int64_t));
diff --git a/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp b/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp
index dd851f1ddf3..bc522eba0b3 100644
--- a/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_hll_test.cpp
@@ -27,33 +27,6 @@
 
 namespace doris::vectorized {
 
-TEST(HLLSerdeTest, writeColumnToMysql) {
-    auto hll_serde = std::make_shared<vectorized::DataTypeHLLSerDe>(1);
-    auto column_hll = ColumnHLL::create();
-    column_hll->insert_value(HyperLogLog::empty());
-    ASSERT_EQ(column_hll->size(), 1);
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    hll_serde->set_return_object_as_string(true);
-    auto st = hll_serde->write_column_to_mysql(*column_hll, mysql_rb, 0, false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 2);
-
-    HyperLogLog hll;
-    hll.update(123);
-    column_hll->insert_value(hll);
-    hll_serde->set_return_object_as_string(true);
-    st = hll_serde->write_column_to_mysql(*column_hll, mysql_rb, 1, false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 13);
-    std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
 TEST(HLLSerdeTest, writeOneCellToJsonb) {
     auto hll_serde = std::make_shared<vectorized::DataTypeHLLSerDe>(1);
     auto column_hll = ColumnHLL::create();
diff --git a/be/test/vec/data_types/serde/data_type_serde_number_test.cpp b/be/test/vec/data_types/serde/data_type_serde_number_test.cpp
index 360671eaa97..43186d1fa26 100644
--- a/be/test/vec/data_types/serde/data_type_serde_number_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_number_test.cpp
@@ -274,15 +274,6 @@ TEST_F(DataTypeNumberSerDeTest, serdes) {
                 }
             }
         }
-        {
-            // test write_column_to_mysql
-            MysqlRowBuffer<false> mysql_rb;
-            for (int row_idx = 0; row_idx < row_count; ++row_idx) {
-                auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
-                                                      option);
-                EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
-            }
-        }
     };
     test_func(*serde_float32, column_float32);
     test_func(*serde_float64, column_float64);
diff --git a/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp b/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp
index 481067212a2..bb74794836d 100644
--- a/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_quantile_state_test.cpp
@@ -25,35 +25,6 @@
 
 namespace doris::vectorized {
 
-TEST(QuantileStateSerdeTest, writeColumnToMysql) {
-    auto quantile_state_serde = std::make_shared<vectorized::DataTypeQuantileStateSerDe>(1);
-    auto column_quantile_state = ColumnQuantileState::create();
-    column_quantile_state->insert_value(QuantileState());
-    ASSERT_EQ(column_quantile_state->size(), 1);
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    quantile_state_serde->set_return_object_as_string(true);
-    auto st = quantile_state_serde->write_column_to_mysql(*column_quantile_state, mysql_rb, 0,
-                                                          false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 6);
-
-    QuantileState quantile_state;
-    quantile_state.add_value(123);
-    column_quantile_state->insert_value(quantile_state);
-    quantile_state_serde->set_return_object_as_string(true);
-    st = quantile_state_serde->write_column_to_mysql(*column_quantile_state, mysql_rb, 1, false,
-                                                     options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 20);
-    std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
 TEST(QuantileStateSerdeTest, writeOneCellToJsonb) {
     auto quantile_state_serde = std::make_shared<vectorized::DataTypeQuantileStateSerDe>(1);
     auto column_quantile_state = ColumnQuantileState::create();
diff --git a/be/test/vec/data_types/serde/data_type_serde_string_test.cpp b/be/test/vec/data_types/serde/data_type_serde_string_test.cpp
index 06e8f219c7a..81c25d79cfd 100644
--- a/be/test/vec/data_types/serde/data_type_serde_string_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_string_test.cpp
@@ -186,15 +186,6 @@ TEST_F(DataTypeStringSerDeTest, serdes) {
                 EXPECT_EQ(deser_col_with_type->get_data_at(j), source_column->get_data_at(j));
             }
         }
-        {
-            // test write_column_to_mysql
-            MysqlRowBuffer<false> mysql_rb;
-            for (int row_idx = 0; row_idx < row_count; ++row_idx) {
-                auto st = serde.write_column_to_mysql(*source_column, mysql_rb, row_idx, false,
-                                                      option);
-                EXPECT_TRUE(st.ok()) << "Failed to write column to mysql: " << st;
-            }
-        }
     };
     test_func(*serde_str, column_str32);
 }
diff --git a/be/test/vec/data_types/serde/data_type_serde_timev2_test.cpp b/be/test/vec/data_types/serde/data_type_serde_timev2_test.cpp
deleted file mode 100644
index 2c88a663a81..00000000000
--- a/be/test/vec/data_types/serde/data_type_serde_timev2_test.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-#include <arrow/array/builder_base.h>
-#include <gtest/gtest.h>
-
-#include <string>
-
-#include "runtime/primitive_type.h"
-#include "util/slice.h"
-#include "vec/columns/column_complex.h"
-#include "vec/data_types/common_data_type_serder_test.h"
-#include "vec/data_types/serde/data_type_time_serde.h"
-
-namespace doris::vectorized {
-
-TEST(TimeV2SerdeTest, writeColumnToMysql) {
-    auto timev2_serde = std::make_shared<vectorized::DataTypeTimeV2SerDe>(1);
-    auto column_timev2 = ColumnTimeV2::create();
-    column_timev2->insert_default();
-    ASSERT_EQ(column_timev2->size(), 1);
-    MysqlRowBuffer<false> mysql_rb;
-    DataTypeSerDe::FormatOptions options;
-    options.nested_string_wrapper = "\"";
-    options.wrapper_len = 1;
-    options.map_key_delim = ':';
-    options.null_format = "null";
-    options.null_len = 4;
-    auto st = timev2_serde->write_column_to_mysql(*column_timev2, mysql_rb, 0, false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 11);
-
-    std::string time_str = "11:00:00";
-    column_timev2->insert_data(time_str.c_str(), time_str.size());
-    st = timev2_serde->write_column_to_mysql(*column_timev2, mysql_rb, 1, false, options);
-    EXPECT_TRUE(st.ok());
-    ASSERT_EQ(mysql_rb.length(), 22);
-    std::cout << "test write_column_to_mysql success" << std::endl;
-}
-
-} // namespace doris::vectorized
diff --git a/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp b/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp
index 94f8d04e724..4c5f6dfc80c 100644
--- a/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp
+++ b/be/test/vec/data_types/serde/data_type_serde_varbinary_test.cpp
@@ -155,30 +155,12 @@ TEST_F(DataTypeVarbinarySerDeTest, MysqlTextAndBinaryAndConst) {
 
     DataTypeSerDe::FormatOptions opt;
 
-    // text protocol
-    {
-        MysqlRowBuffer<false> rb;
-        for (int i = 0; i < static_cast<int>(vals.size()); ++i) {
-            auto st = serde.write_column_to_mysql(*col, rb, i, false, opt);
-            EXPECT_TRUE(st.ok()) << st.to_string();
-        }
-        EXPECT_GT(rb.length(), 0);
-        const unsigned char* buf = reinterpret_cast<const unsigned char*>(rb.buf());
-        EXPECT_EQ(buf[0], 1);
-        EXPECT_EQ(buf[2], 3);
-        MysqlRowBuffer<false> rb_const;
-        for (int i = 0; i < 3; ++i) {
-            auto st = serde.write_column_to_mysql(*col, rb_const, i, true, opt);
-            EXPECT_TRUE(st.ok()) << st.to_string();
-        }
-        EXPECT_EQ(reinterpret_cast<const unsigned char*>(rb_const.buf())[0], 1);
-    }
     // binary protocol (smoke)
     {
-        MysqlRowBuffer<true> rb;
+        MysqlRowBinaryBuffer rb;
         rb.start_binary_row(vals.size());
         for (int i = 0; i < static_cast<int>(vals.size()); ++i) {
-            auto st = serde.write_column_to_mysql(*col, rb, i, false, opt);
+            auto st = serde.write_column_to_mysql_binary(*col, rb, i, false, opt);
             EXPECT_TRUE(st.ok()) << st.to_string();
         }
         EXPECT_GT(rb.length(), 0);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org