必须要5.7以上版本才能使用
写在开头
mysql json 的功能很强大,只是用来当一个储存数据的字段 就没什么意义了。
使用proto做交互的话,只要JSON 写得好 用proro.Unmarshal() 就可以很方便的转换类型 可以精简很多代码
JSON path 是以 $ 开头,之后就是JSON的层级使用。$
$[0].name
$[0][1]
//*表示所有
$[*]
数据比较
json中的数据可以用 =, , >=, <>, !=, and <=> 进行比较。
json里的数据类型是多样的,在不同类型之间进行比较时,高优先级的要大于低优先级的(可以用JSON_TYPE()函数查看类型)。
优先级从高到低如下:
BLOB > BIT > OPAQUE > DATETIME > TIME > DATE > BOOLEAN > ARRAY > OBJECT > STRING > INTEGER >DOUBLE > NULL
函数整理
创建函数JSON_ARRAY: JSON_ARRAY(val1,val2,val3…)
JSON_OBJECT: 生成一个包含指定K-V对的json object。如果有key为NULL或参数个数为奇数,则抛出异常。
JSON_QUOTE:JSON_QUOTE(json_val) 将json_val用””号括起来。
CONVERT: CONVERT(json_string,JSON)
查询函数JSON_CONTAINS:JSON_CONTAINS(json_doc,var,[path])
查询json文档是否在指定path包含指定的数据,包含则返回1,否则返回0. 如果有参数为null或者path不存在则返回null
JSON_CONTAINS_PATH:JSON_CONTAINS_PATH(json_doc,one_or_all,path,path…..)
查询是否存在指定路径,存在则返回1,否则返回0.如果有参数为NULL,则返回NULL。
one_or_all只能取值“one”或”all”,one表示只要有一个存在即可;all表示所有的都存在才行。
JSON_EXTRACT:JSON_EXTRACT(json_doc, path[, path] …)
5.7.9及以上版本可