STRING 类型
STRING 类型作为文本类型的一种,可以更好地支持和迁移 AP 业务,也支持作为主键的不定长字符串。
基本功能
-
在创建表时,
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