插件窝 干货文章 mysql 是否支持json

mysql 是否支持json

JSON 支持 attributes 数据 138    来源:    2025-03-28

MySQL 对 JSON 的支持情况

MySQL 从 5.7.8 版本开始原生支持 JSON 数据类型,提供了丰富的 JSON 处理功能。

主要支持特性

  1. JSON 数据类型

    • 专门的 JSON 数据类型,用于存储 JSON 格式的数据
    • 自动验证 JSON 格式的有效性
  2. JSON 函数

    • 创建:JSON_ARRAY(), JSON_OBJECT()
    • 查询:JSON_EXTRACT()-> 操作符
    • 修改:JSON_SET(), JSON_INSERT(), JSON_REPLACE(), JSON_REMOVE()
    • 其他:JSON_CONTAINS(), JSON_KEYS(), JSON_LENGTH()
  3. JSON 路径表达式

    • 支持类似 $.store.book[0].title 的路径语法
  4. 索引支持

    • 可以对 JSON 列中的特定字段创建虚拟列并建立索引
    • MySQL 8.0 支持直接在 JSON 列上创建函数索引

使用示例

-- 创建包含 JSON 列的表
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    attributes JSON
);

-- 插入 JSON 数据
INSERT INTO products (name, attributes) 
VALUES ('Laptop', '{"brand": "Dell", "specs": {"cpu": "i7", "ram": "16GB"}}');

-- 查询 JSON 字段
SELECT name, attributes->'$.brand' AS brand FROM products;

-- 更新 JSON 字段
UPDATE products 
SET attributes = JSON_SET(attributes, '$.specs.ram', '32GB') 
WHERE id = 1;

-- 在 JSON 字段上创建索引 (MySQL 8.0+)
ALTER TABLE products ADD COLUMN brand VARCHAR(50) 
GENERATED ALWAYS AS (attributes->>'$.brand') STORED;
CREATE INDEX idx_brand ON products(brand);

版本差异

  • MySQL 5.7.8+:基础 JSON 支持
  • MySQL 8.0+:增强功能,包括:
    • JSON 合并函数 (JSON_MERGE_PATCH, JSON_MERGE_PRESERVE)
    • 改进的 JSON 路径表达式
    • 直接在 JSON 列上创建函数索引
    • JSON 聚合函数 (JSON_ARRAYAGG, JSON_OBJECTAGG)

MySQL 的 JSON 支持使得它能够很好地处理半结构化数据,适合需要灵活数据模型的场景。