HGDB兼容MySQL bit(n)(APP)

    技术2022-07-11  115

    目录

    环境

    文档用途

    详细信息

    环境

    系统平台:Linux x86-64 Red Hat Enterprise Linux 7

    版本:5.6.4

    文档用途

    PG兼容MySQL的bit(n):写入的数据(整型值)超出bit(n),最大值范围时,bit取全1,否则取精确值,未达到长度填0。

    详细信息

    背景

      PostgreSQL中bit类型支持最大长度允许83886080,MySQL中bit最大长度为64。HGDB还支持varbit类型,支持最大1GB存储,PG处理的范围更广一些。

      但是MySQL在bit处理上有一些与HGDB不兼容的地方,如:

      MySQL写入的数据(整型值)超出bit(n)最大范围时,bit取全1,否则取精确值;未达到长度填0。

      例如:

     

    mysql> create table t2(c1 bit(3)); Query OK, 0 rows affected (0.03 sec) mysql> insert into t2 values(123); Query OK, 1 row affected, 1 warning (0.00 sec) mysql> insert into t2 values(2); Query OK, 1 row affected (0.00 sec) mysql> select * from t2;

    +------+

    | c1   |

    +------+

    |  111 | |  010 |

    |  010 |

    +------+

    2 rows in set (0.00 sec)

      HGDB超出范围则报错:

    demo=# create table t3(c bit(4));

    CREATE TABLE

    demo=# insert into t3 values(b'11111');

    ERROR:  bit string length 5 does not match type bit(4)

    实现兼容

      通过定义一个函数可以达到同样的效果:

     

    create or replace function itob(int, int) returns varbit as $$

        select

        case

        when $1 >= (2^$2 - 1)

            then substring((2^$2 - 1)::int8::bit(64)::text, 64 - $2 + 1)::varbit

        else

            substring($1::bit(64)::text, 64 - $2 + 1)::varbit

        end; $$ language sql strict;

    更多详细信息请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContent/b973012b00526a6b 

    Processed: 0.010, SQL: 9