91人参与 • 2025-07-23 • Javascript
mysql从 5.7 版本开始引入了 json 数据类型,专门用于存储 json 格式的数据。与传统的将 json 作为字符串存储在 varchar 或 text 字段中相比,json 数据类型提供了更好的存储效率和查询性能。
-- 创建包含json字段的表
create table products (
    id int auto_increment primary key,
    name varchar(100),
    attributes json,
    json_string text
);
-- 插入json数据
insert into products (name, attributes, json_string) values (
    'laptop',
    '{"brand": "dell", "specs": {"cpu": "i7", "ram": "16gb"}, "tags": ["electronics", "computer"]}',
    '{"brand": "dell", "specs": {"cpu": "i7", "ram": "16gb"}, "tags": ["electronics", "computer"]}'
);
json数据类型:以优化的二进制格式存储,解析后的结构
传统json字符串:纯文本存储,需要每次使用时解析
使用like查询传统json字符串
-- 查询品牌为dell的产品(传统json字符串方式) select * from products where json_string like '%"brand": "dell"%';
这种方式的缺点:
使用json函数查询json数据类型
-- 查询品牌为dell的产品(json数据类型方式) select * from products where json_extract(attributes, '$.brand') = 'dell'; -- 或使用箭头语法(mysql 8.0+) select * from products where attributes->'$.brand' = '"dell"';
优点:
json字段可以通过生成列添加索引:
-- 为json字段的brand属性创建索引
alter table products add column brand varchar(50) 
    generated always as (json_unquote(attributes->'$.brand')) stored;
create index idx_brand on products(brand);
{
  "brand": "dell",
  "specs": {
    "cpu": "i7",
    "ram": "16gb"
  }
}
{
  "tags": ["electronics", "computer", "laptop"]
}
查询包含特定元素的数组:
select * from products where json_contains(attributes->'$.tags', '"electronics"');
性能考虑:
| 特性 | json数据类型 | 传统json字符串 | 
|---|---|---|
| 存储效率 | 高 | 低 | 
| 查询性能 | 高 | 低 | 
| 索引支持 | 支持 | 不支持 | 
| 复杂查询能力 | 强 | 弱 | 
| 嵌套对象访问性能 | 高 | 低 | 
| 数组操作性能 | 中 | 低 | 
| 数据验证 | 有 | 无 | 
json数据类型在大多数场景下都比传统json字符串存储方式性能更好,特别是在查询和索引支持方面。但对于简单应用或不需要查询json内容的情况,传统字符串方式可能更简单。
到此这篇关于详解mysql中json数据类型用法及与传统json字符串对比的文章就介绍到这了,更多相关mysql json数据类型内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论