mysql 5.7+版本支持json类型字段,提供了 JSON_SET等方法操作json属性,实践如下:
- 并非一定得是json类型才可以使用5.7特性函数进行json查询,longtext、varchar都可以;
- 使用longtext或者json类型时,navicat查询时,无法展现这些字段需要添加JSON_UNQUOTE或者使用->>
//只能查出ID列
SELECT id, (task_params),task_params->'$.aa' FROM ext_task ;
//可以查出三列结果
SELECT id, JSON_UNQUOTE(task_params),task_params->>'$.aa' FROM ext_task ;
- 采用JSON_SET等方法修改属性值时,如果存放的为数组,需要使用JSON_ARRAY生成,否则存储的为字符串,JSON_OBJECT类似
//正确方式
UPDATE ext_task SET task_params = JSON_SET(task_params, '$.aa', JSON_ARRAY(' Mysql', 'Database')) WHERE id = 1;
//错误方式
UPDATE ext_task SET task_params = JSON_SET(task_params, '$.aa', '[ "Mysql", "Database"]' WHERE id = 1;
详情请参阅:官方文档网址