You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL将布尔值转换为JSON时结果不一致问题咨询

MySQL 5.7.24中CAST布尔字面量与CASE结果为JSON的差异原因

核心差异根源

MySQL 5.7没有原生布尔数据类型,True和False本质是整数1和0的别名,但不同场景下的类型处理逻辑存在差异:

1. CAST(True AS JSON) 返回true的原因

当直接把True作为CAST的输入常量时,MySQL的CAST(... AS JSON)函数会对True/False字面量做特殊识别,直接将其映射为JSON标准的布尔值true/false,而非先转成对应整数再转JSON。

2. CAST(CASE ... END AS JSON) 返回1的原因

在CASE表达式中:

  • THEN True里的True会被解析为整数1,因为CASE表达式会自动统一返回值的类型(这里分支的True和False都会被转换为整数类型);
  • 最终CASE表达式的结果是整数1,对这个整数执行CAST(... AS JSON),得到的就是JSON数字类型值1,而非布尔值。

关于"正确性"的说明

这两种结果都符合MySQL 5.7的类型处理规则,不存在谁对谁错,只是不同场景下类型转换逻辑差异导致的结果不同。如果需要在第二种场景下得到JSON布尔值,可以直接返回字符串形式的'true'再转换,示例:

SELECT CAST(CASE WHEN 1=1 THEN 'true' ELSE 'false' END AS JSON)

内容的提问来源于stack exchange,提问作者Fengtao Ding

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 06:53:10