STRING型はテキスト型の一種であり、AP業務をより適切にサポートし、移行することができます。また、主キーとして使用される可変長文字列もサポートしています。
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP1バージョンからテキストデータ型STRINGがサポートされています。
基本機能
テーブル作成時、
STRING型はデータ長を指定する必要がなく、最大で16MB(16,777,216バイト)までのデータを格納できます。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列を主キーまたはインデックスキーとして使用する場合、書き込み(または更新)時に主キーまたはインデックスキーの長さが確認され、16KBを超えるとエラーが発生します。
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の3つの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