{"record":{"id":"aed18b0bc6d9ae30","repo":"alibaba/canal","slug":"unknown-enum-packlen","errorCode":null,"errorMessage":"!! Unknown ENUM packlen = ","messagePattern":"!! Unknown ENUM packlen = ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java","lineNumber":859,"sourceCode":"                javaType = Types.VARCHAR; // Types.INTEGER;\r\n                length = 1;\r\n                break;\r\n            }\r\n            case LogEvent.MYSQL_TYPE_ENUM: {\r\n                final int int32;\r\n                /*\r\n                 * log_event.h : This enumeration value is only used internally and cannot exist\r\n                 * in a binlog.\r\n                 */\r\n                switch (len) {\r\n                    case 1:\r\n                        int32 = buffer.getUint8();\r\n                        break;\r\n                    case 2:\r\n                        int32 = buffer.getUint16();\r\n                        break;\r\n                    default:\r\n                        throw new IllegalArgumentException(\"!! Unknown ENUM packlen = \" + len);\r\n                }\r\n                // logger.warn(\"MYSQL_TYPE_ENUM : This enumeration value is \"\r\n                // + \"only used internally and cannot exist in a binlog!\");\r\n                value = valueOf(int32);\r\n                javaType = Types.INTEGER;\r\n                length = len;\r\n                break;\r\n            }\r\n            case LogEvent.MYSQL_TYPE_SET: {\r\n                final int nbits = (meta & 0xFF) * 8;\r\n                len = (nbits + 7) / 8;\r\n                if (nbits > 1) {\r\n                    // byte[] bits = new byte[len];\r\n                    // buffer.fillBytes(bits, 0, len);\r\n                    // 转化为unsign long\r\n                    switch (len) {\r\n                        case 1:\r\n                            value = buffer.getUint8();\r","sourceCodeStart":841,"sourceCodeEnd":877,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java#L841-L877","documentation":"Thrown while decoding a MYSQL_TYPE_ENUM column. ENUM values are stored as a packed integer of 1 byte (enum <= 255 values) or 2 bytes. The switch only handles len 1 and 2; any other length is impossible for a valid MySQL ENUM and indicates corrupt table-map metadata. The comment notes MYSQL_TYPE_ENUM is internal-only and should not appear in a binlog in modern MySQL, so hitting this also implies a legacy or forked event stream.","triggerScenarios":"A Table_map_event declares ENUM with a storage length other than 1 or 2 bytes, or an event stream from an old MySQL that still writes MYSQL_TYPE_ENUM into the binlog.","commonSituations":"Replicating from a very old MySQL 5.0/5.1 stream; binlog corruption; a MySQL fork that reuses the ENUM type code differently.","solutions":["Confirm the master MySQL version; ENUM in binlogs typically arrives as MYSQL_TYPE_STRING in modern versions.","Inspect the Table_map event with mysqlbinlog --hexdump to verify the column metadata.","Upgrade Canal to a build that handles the master's encoding.","Filter the table if the ENUM column is not required downstream."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"boolean isValidEnumPacklen(int len) {\n    return len == 1 || len == 2;\n}","typeGuard":null,"tryCatchPattern":"try {\n    buffer.fetchValue(name, index, type, meta, isBinary);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"!! Unknown ENUM packlen\")) {\n        logger.warn(\"Corrupt ENUM packlen={} in tableId={}, skipping column\", len, tableId);\n    } else throw e;\n}","preventionTips":["Modern MySQL stores ENUM as MYSQL_TYPE_STRING; if you see MYSQL_TYPE_ENUM in the binlog, suspect an old or forked source.","Validate the binlog with mysqlbinlog --hexdump when ENUM errors appear."],"tags":["binlog","rows-buffer","column-type","enum","parsing"],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}