简介:
查询语句:
SELECT * FROM ITEM where json_extract( METADATA, '$.hide' )= 1
数据结构:ITEM 表中查询 METADATA 扩展字段
报错原文:
SELECT * FROM ITEM where json_extract( METADATA, '$.hide' )= 1
> Invalid JSON text in argument 1 to function json_extract: "The document is empty." at position 0.
> 时间: 0.081s
猜测问题:
- 开始以为是字段名错了,或者是json数据填错字段了导致。(检查后并不是这里问题)
- 猜测是语法或者mysql版本问题导致(查看文档后发现并不是这些问题,切换语句也不行)
- 测试时发现了增加了其他查询条件后能够查询到数据
发现问题:
- 报错说明了发现文档为空或根本不存在,其实意识就是说这个字段可能是null或者为""导致json查询不到(被这里的异常迷惑了)
- 查询出有几条数据这个字段是空字符串导致json_extract函数处理异常导致查询不到数据。
解决方案:
- 发现可以通过JSON_VALID语句可以解决,会处理掉空字符串的数据
SELECT * FROM ITEM WHERE CASE WHEN JSON_VALID( METADATA ) THEN json_extract( METADATA, '$.hide' )= 1 ELSE NULL END
-
可以通过处理这几条为空字符串的数据处理