MySQL 中的數組類型主要包括 SET 和 JSON,下面就分別來介紹一下。
SET
SET 類型其實就是一個用逗號隔開的字符串。它可以用于存儲一個固定數目的值,每個值占用一個二進制位,也就是說,如果你定義了一個包含 8 個不同值的 SET 列,那么占用的是一個字節。
SET 的語法如下:
CREATE TABLE t1 ( col SET('A', 'B', 'C', 'D') NOT NULL );
你也可以使用 ALTER TABLE 語句來修改一個字段的類型為 SET:
ALTER TABLE t1 MODIFY col SET('A', 'B', 'C', 'D', 'E') NOT NULL;
SET 類型可以存儲多個值,也可以使用 FIND_IN_SET() 函數來檢查一個值是否在 SET 中:
SELECT col FROM t1 WHERE FIND_IN_SET('B', col);
JSON
JSON 類型用于存儲 JSON 格式的數據,是 MySQL 5.7.8 之后的新特性。
JSON 類型的語法如下:
CREATE TABLE t1 ( col JSON NOT NULL );
如果要對 JSON 字段進行查詢、排序或者修改,可以使用 JSON 函數。
例如,如果要查詢 JSON 字段中的某個字段的值,可以使用 JSON_EXTRACT() 函數:
SELECT JSON_EXTRACT(col, '$.name') AS name FROM t1;
類似的,如果要查詢 JSON 字段中的某個子元素的個數,可以使用 JSON_ARRAY_LENGTH() 函數:
SELECT JSON_ARRAY_LENGTH(col->"$.arr") AS cnt FROM t1;