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 TABLE 和 DESCRIBE 中显示为 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语句。