{"record":{"id":"bb21ff7d6cee85aa","repo":"alibaba/canal","slug":"unknown-set-len","errorCode":null,"errorMessage":"!! Unknown Set len = ","messagePattern":"!! Unknown Set len = ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java","lineNumber":901,"sourceCode":"                            value = buffer.getUint24();\r\n                            break;\r\n                        case 4:\r\n                            value = buffer.getUint32();\r\n                            break;\r\n                        case 5:\r\n                            value = buffer.getUlong40();\r\n                            break;\r\n                        case 6:\r\n                            value = buffer.getUlong48();\r\n                            break;\r\n                        case 7:\r\n                            value = buffer.getUlong56();\r\n                            break;\r\n                        case 8:\r\n                            value = buffer.getUlong64();\r\n                            break;\r\n                        default:\r\n                            throw new IllegalArgumentException(\"!! Unknown Set len = \" + len);\r\n                    }\r\n                } else {\r\n                    final int bit = buffer.getInt8();\r\n                    // value = (bit != 0) ? Boolean.TRUE : Boolean.FALSE;\r\n                    value = bit;\r\n                }\r\n\r\n                javaType = Types.BIT;\r\n                length = len;\r\n                break;\r\n            }\r\n            case LogEvent.MYSQL_TYPE_TINY_BLOB: {\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                logger.warn(\"MYSQL_TYPE_TINY_BLOB : This enumeration value is \"\r\n                            + \"only used internally and cannot exist in a binlog!\");\r","sourceCodeStart":883,"sourceCodeEnd":919,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java#L883-L919","documentation":"Thrown while decoding a MYSQL_TYPE_SET column. Like BIT, a SET is packed into the fewest bytes needed for its member count (nbits = (meta&0xFF)*8, len=(nbits+7)/8). The switch reads little-endian integers for byte lengths 1-8 only. MySQL SET is limited to 64 members, so len should never exceed 8; a value outside that range means corrupt metadata.","triggerScenarios":"A Table_map_event advertises a SET column whose member count yields a byte length of 0 or > 8, which MySQL cannot create. Corrupt event or non-standard source.","commonSituations":"Binlog corruption; replicating from a forked engine that emits oversized SET metadata; schema drift between master and Canal's cached table map.","solutions":["Check the source SET column definition on the master (max 64 members).","Validate the binlog at the reported position with mysqlbinlog.","Upgrade Canal to match the master version.","Exclude the table via canal.instance.filter.regex if unneeded."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"boolean isValidSetLen(int meta) {\n    int nbits = (meta & 0xFF) * 8;\n    int len = (nbits + 7) / 8;\n    return len >= 1 && len <= 8; // MySQL SET max 64 members\n}","typeGuard":null,"tryCatchPattern":"try {\n    buffer.fetchValue(name, index, type, meta, isBinary);\n} catch (IllegalArgumentException e) {\n    if (e.getMessage().startsWith(\"!! Unknown Set len\")) {\n        logger.warn(\"Corrupt SET metadata meta={} in tableId={}, skipping column\", meta, tableId);\n    } else throw e;\n}","preventionTips":["Confirm SET columns on the master have <= 64 members.","Monitor binlog integrity to catch metadata corruption early."],"tags":["binlog","rows-buffer","column-type","set","parsing"],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}