更新时间:2024-08-20 GMT+08:00

二进制类型

GaussDB支持的二进制类型如表1所示。

表1 二进制类型

名称

描述

存储空间

BLOB

二进制大对象。

目前BLOB支持的外部存取接口仅为:

  • DBE_LOB.GET_LENGTH
  • DBE_LOB.READ
  • DBE_LOB.WRITE
  • DBE_LOB.WRITE_APPEND
  • DBE_LOB.COPY
  • DBE_LOB.ERASE

这些接口详细说明请参见DBE_LOB

在ustore下,最大为1GB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此BLOB类型最大值可能小于1GB-1。

当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'和参数b_format_dev_version = 's1'时,BLOB类型映射为BYTEA类型,别名为BYTEA。

具体存储规格参考BYTEA类型。

TINYBLOB

MEDIUMBLOB

LONGBLOB

二进制大对象。

具体存储规格参考BYTEA类型。

只有当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'和参数b_format_dev_version = 's1'时,可以使用此类型,类型映射为BYTEA类型,别名为BYTEA。

RAW

变长的十六进制类型。

4字节加上实际的二进制字符串。最大为1GB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此类型最大值可能小于1GB-1。

BYTEA

变长的二进制字符串。

4字节加上实际的二进制字符串。最大为1GB-1,但还需要考虑到列描述头信息的大小,以及列所在元组的大小限制(也小于1GB-1),因此类型最大值可能小于1GB-1。

BYTEAWITHOUTORDERWITHEQUALCOL

变长的二进制字符串(密态特性新增的类型,如果加密列的加密类型指定为确定性加密,则该列的实际类型为BYTEAWITHOUTORDERWITHEQUALCOL),元命令打印加密表将显示原始数据类型。

4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

BYTEAWITHOUTORDERCOL

变长的二进制字符串(密态特性新增的类型,如果加密列的加密类型指定为随机加密,则该列的实际类型为BYTEAWITHOUTORDERCOL),元命令打印加密表将显示原始数据类型。

4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

_BYTEAWITHOUTORDERWITHEQUALCOL

变长的二进制字符串,密态特性新增的类型。

4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

_BYTEAWITHOUTORDERCOL

变长的二进制字符串,密态特性新增的类型。

4字节加上实际的二进制字符串。最大为1GB减去53字节(即1073741771字节)。

  • 除了每列的大小限制以外,每个元组的总大小也不可超过1GB-1字节。
  • 不支持直接使用BYTEAWITHOUTORDERWITHEQUALCOL、BYTEAWITHOUTORDERCOL、_BYTEAWITHOUTORDERWITHEQUALCOL和_BYTEAWITHOUTORDERCOL类型创建表。
  • RAW(n),n是指字节长度建议值,不会用于校验输入RAW类型的字节长度。
  • 当sql_compatibility = 'MYSQL'时,设置参数b_format_version = '5.7'和参数b_format_dev_version = 's1'后,TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB类型的表现规格为BYTEA类型,如查询表结构显示为BYTEA类型。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
--创建表。
gaussdb=# CREATE TABLE blob_type_t1 
(
    BT_COL1 INTEGER,
    BT_COL2 BLOB,
    BT_COL3 RAW,
    BT_COL4 BYTEA
) DISTRIBUTE BY REPLICATION;

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

--查询表中的数据。
gaussdb=# SELECT * FROM blob_type_t1;
 bt_col1 | bt_col2 | bt_col3  |  bt_col4   
---------+---------+----------+------------
      10 |         | DEADBEEF | \xdeadbeef
(1 row)

--删除表。
gaussdb=# DROP TABLE blob_type_t1;

--示例:TINYBLOB MEDIUMBLOB LONGBLOB二进制大对象类型。
gaussdb=# CREATE DATABASE gaussdb_m WITH dbcompatibility  'MYSQL';
gaussdb=# \c gaussdb_m
--设置兼容版本控制参数。
gaussdb_m=# SET b_format_version='5.7';
gaussdb_m=# SET b_format_dev_version='s1';
--创建表。
gaussdb_m=# CREATE TABLE t1(num int, a tinyblob, b blob, m mediumblob, l longblob);
--插入数据。
gaussdb_m=# INSERT INTO t1 VALUES (1, 'tinyblobtest', 'blobtest', 'mediumblobtest', 'longblobtest');
--查询表中数据。
gaussdb_m=# SELECT * FROM t1;
 num |      a       |    b     |       m        |      l
-----+--------------+----------+----------------+--------------
   1 | tinyblobtest | blobtest | mediumblobtest | longblobtest
(1 row)

--删除表和数据库。
gaussdb_m=# DROP TABLE t1;
gaussdb_m=# \c postgres;
gaussdb=# DROP DATABASE gaussdb_m;
--重置参数。
gaussdb=# RESET ALL;