JSON_EXTRACT()函数 对value为null的key判断不准确?

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述
场景:JSON_EXTRACT() 函数使用问题

【应用框架及开发适配业务逻辑】

【背景】 做过哪些操作

 CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ext` varchar(16000) DEFAULT '{}',
  PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=60002;

INSERT INTO `test` (id, `ext`) VALUES (1, '{"opt":null}');

SELECT JSON_EXTRACT(`ext`,'$.opt') IS NULL FROM test;

【现象】 业务和数据库现象

  • 结果
mysql> SELECT * FROM test;
+----+--------------+
| id | ext          |
+----+--------------+
|  1 | {"opt":null} |
+----+--------------+
1 row in set (0.06 sec)

mysql> SELECT JSON_EXTRACT(`ext`,'$.opt') IS NULL FROM test;
+-------------------------------------+
| JSON_EXTRACT(`ext`,'$.opt') IS NULL |
+-------------------------------------+
|                                   0 |
+-------------------------------------+
1 row in set (0.06 sec)

【问题】 当前遇到的问题

opt字段的value明明为空,为什么判断IS NULL会为0,不应该为1吗?

【业务影响】
功能无法实现

【TiDB 版本】

5.1.0

【附件】 相关日志及监控(https://metricstool.pingcap.com/)


若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

问题好像解决了:

JSON_EXTRACT 无法根据null推断出为null type,需要添加JSON_TYPE辅助判断,

例如:

mysql>  SELECT JSON_TYPE(JSON_EXTRACT('{"opt":null}','$.opt')) = 'NULL';
+----------------------------------------------------------+
| JSON_TYPE(JSON_EXTRACT('{"opt":null}','$.opt')) = 'NULL' |
+----------------------------------------------------------+
|                                                        1 |
+----------------------------------------------------------+
1 row in set (0.05 sec)

学习了。