mysql-protocol中对编码长度整数型的规则
固定长度整型数值在mysql 协议中的应用之一就是affected row ;这个要根据首字节来判断
1、如果首字节小于251;那么首字节就是它要表示的数值。
2、如果首字节等于251;那么它表示的就是空值。
3、如果首字节等于252;那么首字节后的2个字节用来表示数值大小。
4、如果首字节等于253;那么首字节后的3个字节用来表示数值的大小。
5、如果首字节等于254;那么首字节后的8个字节用来表示数亿的大小。
python描述
def read_lc_int(buf): """ Takes a buffer and reads an length code string from the start. Returns a tuple with buffer less the integer and the integer read. """ if not buf: raise ValueError("Empty buffer.") lcbyte = buf[0] if lcbyte == 251: return (buf[1:], None) elif lcbyte < 251: return (buf[1:], int(lcbyte)) elif lcbyte == 252: return (buf[3:], struct_unpack('<xH', buf[0:3])[0]) elif lcbyte == 253: return (buf[4:], struct_unpack('<I', buf[1:4] + b'\x00')[0]) elif lcbyte == 254: return (buf[9:], struct_unpack('<xQ', buf[0:9])[0]) else: raise ValueError("Failed reading length encoded integer")
mysql官方文档
http://dev.mysql.com/doc/internals/en/integer.html