{"record":{"id":"249b81f9fa2781ae","repo":"alibaba/canal","slug":"unknown-mysql-type-geometry-packlen","errorCode":null,"errorMessage":"!! Unknown MYSQL_TYPE_GEOMETRY packlen = ","messagePattern":"!! Unknown MYSQL_TYPE_GEOMETRY packlen = ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java","lineNumber":1098,"sourceCode":"            case LogEvent.MYSQL_TYPE_GEOMETRY: {\r\n                /*\r\n                 * MYSQL_TYPE_GEOMETRY: copy from BLOB or TEXT\r\n                 */\r\n                switch (meta) {\r\n                    case 1:\r\n                        len = buffer.getUint8();\r\n                        break;\r\n                    case 2:\r\n                        len = buffer.getUint16();\r\n                        break;\r\n                    case 3:\r\n                        len = buffer.getUint24();\r\n                        break;\r\n                    case 4:\r\n                        len = (int) buffer.getUint32();\r\n                        break;\r\n                    default:\r\n                        throw new IllegalArgumentException(\"!! Unknown MYSQL_TYPE_GEOMETRY packlen = \" + meta);\r\n                }\r\n                /* fill binary */\r\n                byte[] binary = new byte[len];\r\n                buffer.fillBytes(binary, 0, len);\r\n                // Warning unsupport cloumn type\r\n                // logger.warn(String.format(\"!! Unsupport column type MYSQL_TYPE_GEOMETRY:\r\n                // meta=%d (%04X), len = %d\", meta,meta, len));\r\n                javaType = Types.BINARY;\r\n                value = binary;\r\n                length = len;\r\n                break;\r\n            }\r\n            case LogEvent.MYSQL_TYPE_BOOL:\r\n            case LogEvent.MYSQL_TYPE_INVALID:\r\n            default:\r\n                logger.error(\r\n                    String.format(\"!! Don't know how to handle column type=%d meta=%d (%04X)\", type, meta, meta));\r\n                javaType = Types.OTHER;\r","sourceCodeStart":1080,"sourceCodeEnd":1116,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java#L1080-L1116","documentation":"Thrown while decoding a MYSQL_TYPE_GEOMETRY column. Geometry is stored as a blob with a 1-4 byte length prefix (meta). The switch handles meta 1-4; otherwise it throws. The code then reads raw bytes and maps to java.sql.Types.BINARY with a warning that the column type is unsupported for interpretation. So the throw only fires on a corrupt length-prefix meta, not on 'geometry is unsupported' — raw bytes are accepted when meta is valid.","triggerScenarios":"A Table_map_event declares a GEOMETRY column with length-prefix meta outside 1-4. Corrupt event or mis-encoded metadata.","commonSituations":"Binlog corruption; replicating spatial columns from a MySQL version Canal's parser mishandles; truncation of the table-map event.","solutions":["Verify the GEOMETRY column definition on the master.","Inspect the binlog with mysqlbinlog --hexdump at the failing position.","Upgrade Canal to match the master version.","Filter the table via canal.instance.filter.regex if spatial data is not needed downstream."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"boolean isValidGeometryPacklen(int meta) {\n    return meta >= 1 && meta <= 4;\n}","typeGuard":null,"tryCatchPattern":"try {\n    buffer.fetchValue(name, index, type, meta, isBinary);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"!! Unknown MYSQL_TYPE_GEOMETRY packlen\")) {\n        logger.warn(\"Corrupt GEOMETRY packlen meta={} in tableId={}, skipping column\", meta, tableId);\n    } else throw e;\n}","preventionTips":["Validate GEOMETRY column metadata via mysqlbinlog --hexdump.","Keep Canal aligned with the master version.","Filter spatial tables when not needed downstream."],"tags":["binlog","rows-buffer","column-type","geometry","parsing"],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}