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
相关产品推荐
相关产品推荐

