有没有办法在数据库中保存小于1个字节的数据?

时间:2018-02-27 12:19:20

标签: sql oracle bigdata bit

我有一个大数据(某些TB),我必须保存在数据库中。

我有一些可以保存为少量的列(columnA有20个唯一值1 ... 20,columnB有10个值等等。)

有没有办法将这些数据保存在数据库中只有4位,5位......(AS NEEDED)?不是像小int或类似的1字节。

如果那样的话。我应该使用什么数据库引擎(针对这种特定情况)?

1 个答案:

答案 0 :(得分:2)

如果您真的想要,可以将多个值打包到一个字节中,并使用虚拟列和位操作来提取单个值:

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE test (
  value CHAR(1 BYTE),
  five_bits NUMBER(2,0) GENERATED ALWAYS
            AS ( BITAND( ASCII(value), 1+2+4+8+16 ) ) VIRTUAL,
  two_bits  NUMBER(1,0) GENERATED ALWAYS
            AS ( BITAND( ASCII(value), 32+64 ) / 32 ) VIRTUAL,
  one_bit   NUMBER(1,0) GENERATED ALWAYS
            AS ( BITAND( ASCII(value), 128 ) / 128 ) VIRTUAL
);

INSERT INTO test ( value ) VALUES ( CHR( 20 + 2*32 + 0*128 ) );

查询1

SELECT * FROM test

<强> Results

| VALUE | FIVE_BITS | TWO_BITS | ONE_BIT |
|-------|-----------|----------|---------|
|     T |        20 |        2 |       0 |

但是,使用此变通方法会产生性能开销,我建议保存有限数量的字节可能不值得。