二进制类型

openGauss支持的二进制类型请参见表1。

相比于原始的openGauss,dolphin对于二进制类型的修改主要为:

  1. 新增BINARY/VARBINARY/TINYBLOB/MEDIUMBLOB/LONGBLOB类型。
  2. 对BLOB类型的输入函数进行了修改,在dolphin.b_compatibility_mode为on的情况下,其输入可以兼容MySQL数据库的普通字符串输入,输出则需要再将bytea_output参数设置为escape才能输出对应的字符串,否则会被转换成十六进制字符串的形式进行输出。
  3. 对TINYBLOB/MEDIUMBLOB/LONGBLOB类型,在dolphin.b_compatibility_mode为off的情况下也可以兼容MySQL数据库的普通字符串输入,输出则需要再将bytea_output参数设置为escape才能输出对应的字符串,否则会被转换成十六进制字符串的形式进行输出。
  4. 对BINARY类型的输入函数进行了修改,可支持MySQL数据库中的转义字符识别。
  5. 新增BIANRY EXPR用法,用在任意表达式前的BINARY 关键字,表示将此表达式转化为二进制类型;

表 1 二进制类型

名称 描述 存储空间
BLOB 二进制大对象。 说明: 列存不支持BLOB类型。 BLOB类型仅在dolphin.b_compatibility_mode为on的情况下才能够兼容MySQL数据库接收普通字符串输入的功能。 最大为32TB(即35184372088832字节)。
TINYBLOB 二进制大对象。 说明: 列存不支持TINYBLOB类型。 TINYBLOB类型不需要开启dolphin.b_compatibility_mode就可以兼容MySQL数据库接收普通字符串输入的功能。 最大为255字节
MEDIUMBLOB 二进制大对象。 说明: 列存不支持MEDIUMBLOB类型。 MEDIUMBLOB类型不需要开启dolphin.b_compatibility_mode就可以兼容MySQL数据库接收普通字符串输入的功能。 最大为16M - 1字节
LONGBLOB 二进制大对象。 说明: 列存不支持LONGBLOB类型。 LONGBLOB类型不需要开启dolphin.b_compatibility_mode就可以兼容MySQL数据库接收普通字符串输入的功能。 最大为4G - 1字节
RAW 变长的十六进制类型。 说明: 列存不支持RAW类型。 4字节加上实际的十六进制字符串。最大为1GB-8203字节(即1073733621字节)。
BYTEA 变长的二进制字符串。 4字节加上实际的二进制字符串。最大为1GB-8203字节(即1073733621字节)。
BINARY 定长的二进制字符串。 4字节加上实际的二进制字符串(255字节)。最大为259字节。
VARBINARY 变长的二进制字符串。 4字节加上实际的二进制字符串(65535字节)。最大为65539字节。
BYTEAWITHOUTORDERWITHEQUALCOL 变长的二进制字符串(密态特性新增的类型,如果加密列的加密类型指定为确定性加密,则该列的实际类型为BYTEAWITHOUTORDERWITHEQUALCOL),元命令打印加密表将显示原始数据类型。 4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。
BYTEAWITHOUTORDERCOL 变长的二进制字符串(密态特性新增的类型,如果加密列的加密类型指定为随机加密,则该列的实际类型为BYTEAWITHOUTORDERCOL),元命令打印加密表将显示原始数据类型。 4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。
_BYTEAWITHOUTORDERWITHEQUALCOL 变长的二进制字符串,密态特性新增的类型。 4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。
_BYTEAWITHOUTORDERCOL 变长的二进制字符串,密态特性新增的类型。 4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

二进制类型 - 图1 说明:

  • 除了每列的大小限制以外,每个元组的总大小也不可超过1GB-8203字节(即1073733621字节)。
  • 不支持直接使用BYTEAWITHOUTORDERWITHEQUALCOL、BYTEAWITHOUTORDERCOL、_BYTEAWITHOUTORDERWITHEQUALCOL和_BYTEAWITHOUTORDERCOL类型创建表。

示例:

1. --创建表。
2. openGauss=#  CREATE TABLE blob_type_t1
3. (
4. BT_COL1 INTEGER,
5. BT_COL2 BLOB,
6. BT_COL3 RAW,
7. BT_COL4 BYTEA
8. ) ;

10. --插入数据。
11. openGauss=#  INSERT INTO blob_type_t1 VALUES(10,empty_blob(),
12. HEXTORAW('DEADBEEF'),E'\\xDEADBEEF');

14. --查询表中的数据。
15. openGauss=#  SELECT * FROM blob_type_t1;
16. bt_col1 | bt_col2 | bt_col3  |  bt_col4
17. ---------+---------+----------+------------
18. 10 |         | DEADBEEF | \xdeadbeef
19. (1 row)

21. --删除表。
22. openGauss=#  DROP TABLE blob_type_t1;

24. --使用BINARY转化
25. openGauss=# select 'a\t'::binary;
26. binary
27. --------
28. \x6109
29. (1 row)

31. openGauss=# select binary 'a\b';
32. binary
33. --------
34. \x6108
35. (1 row)