ARRAY 数据类型

ARRAY 类型适合直接在表中存储有序值列表或嵌套列表,并在 SQL 中按下标读取指定元素。例如,业务可以把一组标签 ID、采样点序列或二维数组直接写入 ARRAY 列,再用 array_element() 读取其中某个元素。

使用场景

  • 存储有序值列表,并在查询中按下标读取指定位置的元素。
  • 存储嵌套列表,例如二维数组,并在 SQL 中逐层取值。
  • 需要保留数组结构,但又希望在数据库侧完成简单读取,而不是完全交给应用层解析。

使用前提与开启方式

ARRAY 类型由全局系统变量 pkdb_extra_data_type 控制,默认值为 OFF

在创建 ARRAY 列之前,先确认并开启该变量:

SHOW GLOBAL VARIABLES LIKE 'pkdb_extra_data_type'; SET GLOBAL pkdb_extra_data_type = ON;

开启后,后续新建的 ARRAY 列会在 SHOW CREATE TABLEDESCRIBE 中显示为 array

关闭该变量时,ARRAY 关键字本身不会报语法错,但后续新建列会按 json 处理。因此,在使用 ARRAY 类型前,建议先通过 SHOW CREATE TABLE 确认列类型。

已经创建好的 array 列不受该变量后续切换影响。即使之后将 pkdb_extra_data_type 设回 OFF,已有 array 列仍保持 array 类型并可继续读写。

SQL 示例

下面的示例展示了如何创建 ARRAY 列、写入一维和二维数组,以及使用 array_element() 读取元素:

SET GLOBAL pkdb_extra_data_type = ON; DROP TABLE IF EXISTS array_demo; CREATE TABLE array_demo ( id INT PRIMARY KEY, arr ARRAY ); SHOW CREATE TABLE array_demo; INSERT INTO array_demo VALUES (1, JSON_ARRAY(10, 20, 30)), (2, '[[1,2], [3,4]]'); SELECT id, arr, array_element(arr, 0) AS first_item, array_element(arr, 5) AS out_of_range FROM array_demo WHERE id = 1; SELECT id, array_element(arr, 1, 0) AS nested_item FROM array_demo WHERE id = 2; DROP TABLE array_demo;

注意事项与限制

  • array 列写入值时,输入必须是合法的 JSON 数组。标量值或 JSON 对象会报 Invalid ARRAY value
  • array_element() 使用从 0 开始的下标。读取越界位置或使用负下标时,返回 NULL
  • array_element() 支持多个下标参数,可用于逐层读取嵌套数组中的元素。
  • array_element() 的下标参数必须是整数文本;非整数输入会报错。
  • 本文介绍的是列类型 ARRAY。如果你要为 JSON 数组建立多值索引,请参阅 CREATE INDEX 语句

相关文档