HGDB兼容MySQL bit(n)(APP)

目录

环境

文档用途

详细信息

环境

系统平台: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 

猜你喜欢

转载自blog.csdn.net/pg_hgdb/article/details/107063291
BIT