標籤:
固定長度整型數值在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
mysql-protocol中對編碼長度整數型的規則