apache/seatunnel · error · org.apache.seatunnel.common.exception.SeaTunnelRuntimeException
COMMON-17
COMMON-17
Error message
'<identifier>' unsupported convert type '<dataType>' of '<field>' to SeaTunnel data type.
What it means
Thrown by MySqlTypeConverter.convert() when a MySQL column type has no mapping to a SeaTunnel data type. The converter handles known MySQL types (TIMESTAMP -> OFFSET_DATE_TIME, etc.); the default branch fires for unrecognized or unsupported type strings. This aborts schema conversion of the MySQL source before data reading.
Source
Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/mysql/MySqlTypeConverter.java:329
break;
case MYSQL_DATE:
builder.dataType(LocalTimeType.LOCAL_DATE_TYPE);
break;
case MYSQL_TIME:
builder.dataType(LocalTimeType.LOCAL_TIME_TYPE);
builder.scale(typeDefine.getScale());
break;
case MYSQL_DATETIME:
builder.dataType(LocalTimeType.LOCAL_DATE_TIME_TYPE);
builder.scale(typeDefine.getScale());
break;
case MYSQL_TIMESTAMP:
// MySQL TIMESTAMP is LTZ (stored as UTC, displayed in session timezone)
builder.dataType(LocalTimeType.OFFSET_DATE_TIME_TYPE);
builder.scale(typeDefine.getScale());
break;
default:
throw CommonError.convertToSeaTunnelTypeError(
DatabaseIdentifier.MYSQL, mysqlDataType, typeDefine.getName());
}
return builder.build();
}
@Override
public BasicTypeDefine<MysqlType> reconvert(Column column) {
BasicTypeDefine.BasicTypeDefineBuilder builder =
BasicTypeDefine.<MysqlType>builder()
.name(column.getName())
.nullable(column.isNullable())
.comment(column.getComment())
.defaultValue(column.getDefaultValue());
switch (column.getDataType().getSqlType()) {
case NULL:
builder.nativeType(MysqlType.NULL);
builder.columnType(MYSQL_NULL);
builder.dataType(MYSQL_NULL);View on GitHub (pinned to cf67b549a7)
Solutions
- Read '<dataType>' from the message to find the unsupported MySQL column and its field name.
- Exclude the column via explicit SELECT projection or configure the source to skip that table.
- Cast the column in a custom SQL (e.g. ST_AsText(geom) or CAST(col AS CHAR)) so it maps to STRING.
- Upgrade SeaTunnel — newer versions add MySQL type mappings (e.g. geometry/vector support).
- Add a case in MySqlTypeConverter.convert() and contribute upstream.
Example fix
// before SELECT * FROM places; -- GEOMETRY col fails // after SELECT id, ST_AsText(location) AS location FROM places;
Defensive patterns
Strategy: validation
Validate before calling
// Validate MySQL source columns are mappable before job start
for (BasicTypeDefine c : mysqlTableColumns) {
try { new MySqlTypeConverter().convert(c); }
catch (SeaTunnelRuntimeException e) {
throw new IllegalStateException("Unsupported MySQL type " + c.getDataType() + " on column " + c.getName());
}
} Type guard
boolean isMySqlTypeSupported(BasicTypeDefine td) {
try { new MySqlTypeConverter().convert(td); return true; }
catch (SeaTunnelRuntimeException e) { return false; }
} Try / catch
try {
converter.convert(typeDefine);
} catch (SeaTunnelRuntimeException e) {
if (e.getMessage().contains("unsupported convert type")) {
LOG.error("Exclude/cast column {} ({})", typeDefine.getName(), typeDefine.getDataType());
}
throw e;
} Prevention
- Avoid SELECT * on tables with GEOMETRY/JSON/spatial columns unless supported.
- Use SQL casts (ST_AsText, CAST AS CHAR) for special columns.
- Check MySQL-compatible DB (TiDB, etc.) type metadata for nonstandard names.
- Upgrade SeaTunnel to get new MySQL type mappings.
When it happens
Trigger: convert(BasicTypeDefine) on MySqlTypeConverter with a mysqlDataType not in the switch at MySqlTypeConverter.java:329 — e.g. GEOMETRY/POINT spatial types, JSON in old connector versions, BIT beyond handled widths, or vendor-extended type names reported by unusual MySQL-compatible databases.
Common situations: Reading tables with MySQL spatial (GEOMETRY) columns; MySQL-compatible databases (TiDB, Percona variants) reporting nonstandard type names; older MySQL 5.x types or set/enum columns in versions lacking support.
Related errors
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/4ebc2b30bf74e522.
Report an issue: GitHub.