首批通过分布式安全可靠测评,为关键业务系统打造
STRING 类型
更新时间:2026-07-15 20:42:45
STRING 类型作为文本类型的一种,可以更好地支持和迁移 AP 业务,也支持作为主键的不定长字符串。
说明
对于 OceanBase 数据库 V4.3.5 版本,从 V4.3.5 BP1 版本开始支持文本数据类型 STRING。
基本功能
在创建表时,
STRING类型无需指定数据长度,最大可存储的数据长度为 16M(16777216 字节)。STRING类型的列(以下简称 String 列)可以作为主键列和索引列,也可以作为 Key/Range columns/List columns 分区类型的分区键。STRING类型是一种特殊的LOB类型:STRING类型是非主键列,当长度超过LOB_INROW_THRESHOLD(LOB列的阈值)时,会溢出到行外存储。STRING类型是主键列,所有数据会行内存储,数据长度会受主键长度的限制。
使用限制
STRING类型的默认值只支持NULL。STRING类型做非主键列时,是否溢出行外存储受LOB_INROW_THRESHOLD的影响。有关
LOB_INROW_THRESHOLD的介绍信息,参见 LOB 类型 和 ob_default_lob_inrow_threshold。String 列做主键或索引键时,写入(或更新)时会检查主键或索引键长度,超过 16K 会报错。
创建包含 String 列的索引时,如果主表上的 String 列已经溢出行外存储,则会报错无法创建索引。
String 列创建索引之后,如果写入(或更新) String 列的数据,数据需要溢出行外存储(即数据长度大于
LOB_INROW_THRESHOLD),会报错无法写入/更新数据。String 列做分区键时,如果写入(或更新)数据是已经溢出的 LOB,则会报错无法写入(或更新)数据。(例如:
INSERT INTO ... SELECT ...,SELECT的数据是溢出的)。旁路导入场景中,如果目标表 String 列上存在索引,并且导入数据后在目标表上 String 列需要溢出行外存储(即数据长度大于
LOB_INROW_THRESHOLD),会报错无法导入数据。增量旁路导入场景中,如果目标表 String 列上存在索引,源表上对应String 列已经溢出行外存储,则会报错无法导入数据。
使用示例
创建表
test_tbl1,其中col1、col2、col3为 String 列,并且col1列为主键,表按照col1的值进行 KEY 分区,分成 4 个分区。CREATE TABLE test_tbl1 (col1 STRING PRIMARY KEY, col2 STRING, col3 STRING, col4 VARCHAR(10)) PARTITION BY KEY(col1) PARTITIONS 4;String 列
col2上创建索引idx_test_tbl1。CREATE INDEX idx_test_tbl1 ON test_tbl1(col2);查看表
test_tbl1定义。SHOW CREATE TABLE test_tbl1;返回结果如下:
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | test_tbl1 | CREATE TABLE `test_tbl1` ( `col1` string NOT NULL, `col2` string DEFAULT NULL, `col3` string DEFAULT NULL, `col4` varchar(10) DEFAULT NULL, PRIMARY KEY (`col1`), KEY `idx_test_tbl1` (`col2`) BLOCK_SIZE 16384 LOCAL ) ORGANIZATION INDEX DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE ENABLE_MACRO_BLOCK_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by key(col1) (partition `p0`, partition `p1`, partition `p2`, partition `p3`) | +-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set向表
test_tbl1中插入测试数据。INSERT INTO test_tbl1 VALUES("A1", "B1", "C1", "D1"),("A2", "B2", "C2", "D2");查看表
test_tbl1中的数据。SELECT * FROM test_tbl1;返回结果如下:
+------+------+------+------+ | col1 | col2 | col3 | col4 | +------+------+------+------+ | A2 | B2 | C2 | D2 | | A1 | B1 | C1 | D1 | +------+------+------+------+ 2 rows in set