目录
环境
系统平台: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 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