MySQL中使用JSON_CONTAINS查询数组JSON字段uuid报错如何解决?
MySQL JSON_CONTAINS 针对数组结构的正确用法
你的问题出在传给JSON_CONTAINS的第二个参数不符合JSON格式要求。JSON_CONTAINS要求第二个参数必须是有效的JSON值,而你直接传入裸UUID字符串,这不符合JSON语法规范,因此触发了错误。
以下是几种正确的写法:
方法一:手动将UUID转为合法JSON字符串
把UUID用双引号包裹,作为JSON字符串传递给JSON_CONTAINS,同时指定匹配路径$[*].uuid:
SELECT * FROM tables c WHERE JSON_CONTAINS(c.data, '"64a3104c-01e6-417b-8a11-bf5af73ad87d"', '$[*].uuid');
方法二:用JSON_QUOTE()自动生成合法JSON字符串
使用JSON_QUOTE()函数将普通字符串转为符合JSON规范的格式,避免手动加引号的失误:
SELECT * FROM tables c WHERE JSON_CONTAINS(c.data, JSON_QUOTE('64a3104c-01e6-417b-8a11-bf5af73ad87d'), '$[*].uuid');
方法三:构造完整JSON对象匹配数组元素
不指定路径,直接构造和数组中元素结构一致的JSON对象,让JSON_CONTAINS在整个数组中查找匹配项:
SELECT * FROM tables c WHERE JSON_CONTAINS(c.data, '{"uuid": "64a3104c-01e6-417b-8a11-bf5af73ad87d"}');
以上三种方式都能正确匹配JSON数组中包含指定UUID的记录。
内容的提问来源于stack exchange,提问作者littleAlien
相关产品推荐
相关产品推荐

