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

posted on 2016-06-02 11:18  蒋乐兴的技术随笔  阅读(365)  评论(0编辑  收藏  举报

导航