where Charset='utf8';数字精度对于decimal的精度是来自field_length和pack_flagnumeric_precision 即字符长度(整数+小数,不含小数点), 为...field_length -2numeric_scale 为小数部分长度,是pack_flag的前1字节(注意是小端)的后4bit.代码逻辑参考: if col..., 比如毫秒,微秒之类的...., flag部分不是定长的, 而是一个bitmask, 用来表示某个字段是否有默认值, 而不管是否有默认值, DEFAULT_VALUE部分均会保留足够大的空间(varchar(200) default...计算默认值的时候, 还得考虑精度.元数据中的"recpos-1"即表示该字段位于DEFAULT_VALUE(bitmask)的起始位置, 结束位置是下一个字段的开始位置.是否为空字段非空约束则是来自 pack_flag