目录
环境
文档用途
详细信息
环境
系统平台:Linux x86-64 Red Hat Enterprise Linux 7
版本:5.6.4
文档用途
详细信息
背景
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
casewhen $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