mysql-protocol中对编码长度整数型的规则

Posted 蒋乐兴的技术随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于mysql-protocol中对编码长度整数型的规则的主要内容,如果未能解决你的问题,请参考以下文章

可变长度整数的编码

在pyspark中用整数编码一列

使用 asn.1 编码大整数时的奇怪之处

是否有任何算法可以在某些模式中对数组进行分类?

在pyspark中使用整数对列进行编码

字符串经过base64编码后的长度与原字符串的长度是什么关系呀?