PostgreSQL类型byteabit varying听起来很相似:
bytea存储binary strings
bit varying存储strings of 1's and 0's
文档没有提到最大的大小。它是1GBcharacter varying吗?
我有两个独立的用例,都在一个有数百万行的表上:
存储MD5哈希
长度为16字节的byteabit(128)。它将用于:
重复数据消除:大量使用GROUP BY,我想有一个索引。
仅使用WHERE md5 =查询精确匹配项。
显示为供人类使用的十六进制字符串。
存储任意二进制数据
长度不超过4kB的二进制数据字符串,用于:
按位操作以查找与某个掩码匹配的字符串。这篇文章最后的例子。
提取一些字节,例如获取字符串中字节14的整数值。
一些重复数据消除。
位操作的工作示例,使用bit varying。掩码是X'00FF00',它只返回行X'AAAAAA'。我缩短了这个例子中的字符串,但它会超过它们的全长,高达4kB。是否可以使用bytea执行类似的操作?

CREATE TABLE test1 (mystring bit varying);
INSERT INTO test1 VALUES (X'AAAAAA'), (X'ABCABC');
SELECT * FROM test1 WHERE mystring & X'00FF00' = X'00AA00';

byteabit varying哪个更合适?
我看到UUID类型被设置为正好存储16个字节,这对存储MD5有什么好处吗?

最佳答案

一般来说,如果不使用按位操作,则应使用bytea
我将较大的值存储在bytea中,然后尽可能将子字符串转换为bit varying进行逐位操作,这主要是因为客户机对bytea的理解比bit varying一致得多,而且I/O格式更紧凑。
MD5值应存储为bytea。对它们执行按位操作毫无意义,通常需要将它们作为二进制文件获取。
我认为bit varying确实有两个用途:
存储字面上是位字符串的标志字段;以及
作为内部计算的中间数据类型
对于几乎所有其他内容,请使用bytea
不过,没有什么能阻止你存储4k位字段。

关于postgresql - PostgreSQL:“字节”和“位变化”类型之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26635547/

10-10 14:06