risingwavelabs/risingwave · error

unsupported data type: {}, set to null

Error message

unsupported data type: {}, set to null

What it means

Raised in `mysql_datum_to_rw_datum` when the RisingWave source column's DataType is one the MySQL datum decoder does not support (Vector, Interval, Struct, List, Int256, Serial, Map). The message notes the value is 'set to null' downstream, but the error itself signals that the declared source schema contains a type not mappable from MySQL CDC data.

Source

Thrown at src/connector/src/parser/mysql.rs:245

                ))),
        },
        DataType::Jsonb => {
            handle_data_type!(
                mysql_row,
                mysql_datum_index,
                column_name,
                serde_json::Value,
                JsonbVal
            )
        }
        DataType::Variant
        | DataType::Vector(_)
        | DataType::Interval
        | DataType::Struct(_)
        | DataType::List(_)
        | DataType::Int256
        | DataType::Serial
        | DataType::Map(_) => Err(anyhow!(
            "unsupported data type: {}, set to null",
            rw_data_type
        )),
    }
}

pub fn mysql_row_to_owned_row(mysql_row: &mut MysqlRow, schema: &Schema) -> OwnedRow {
    let mut datums = vec![];
    for i in 0..schema.fields.len() {
        let rw_field = &schema.fields[i];
        let name = rw_field.name.as_str();
        let datum = match mysql_datum_to_rw_datum(mysql_row, i, name, &rw_field.data_type) {
            Ok(val) => val,
            Err(e) => {
                log_error!(name, e, "parse column failed");
                None
            }
        };

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Remove or change unsupported columns in the source DDL to MySQL-representable types (INT, VARCHAR, etc.).
  2. Replace SERIAL with an explicit BIGINT/AUTO_INCREMENT-mapped column; encode nested data as JSON/VARCHAR instead of STRUCT/LIST.
  3. Recreate the source with a supported schema and let unsupported columns be omitted.

Example fix

// before: unsupported types in MySQL CDC source
tags STRUCT<a INT, b TEXT>,
// after: use JSON/varchar representation
tags JSONB,  -- or VARCHAR storing serialized JSON
Defensive patterns

Strategy: validation

Validate before calling

-- Before CREATE SOURCE, ensure all column types are MySQL-decodable:
-- supported: BOOLEAN, INT16/32/64, FLOAT32/64, DECIMAL, VARCHAR, DATE, TIME,
-- TIMESTAMP, TIMESTAMPTZ, BYTEA. Reject STRUCT/LIST/INTERVAL/SERIAL/Int256/MAP.

Prevention

When it happens

Trigger: Creating a MySQL CDC source/table whose DDL includes an unsupported column type (e.g. STRUCT, LIST, INTERVAL, SERIAL), then ingesting rows so the decoder hits the unsupported arm of the type match.

Common situations: Copy-pasting RisingWave DDL with exotic types into a MySQL CDC source; using SERIAL/Int256 columns in an upstream-backed table; schema evolution introducing an unsupported type mid-stream.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/cbe7d702e4cbdf53. Report an issue: GitHub.