我正在使用MySqlParameterCollection类构建一个MySQL命令,但是我试图查询一个从json列提取的布尔字段。
也就是说,它是一个JSON布尔值。
如果我使用MySqlParameterCollection来添加它,即使我将类型指定为boolean,最终运行的查询看起来也是这样:
从审计中选择jdoc,其中(JSON_EXTRACT(jdoc,'$.myFlag')=0)
这对mysql boolean很好,但该字段是json boolean,只有在运行以下查询时它才起作用:
从审计中选择jdoc,其中(JSON_EXTRACT(jdoc,'$.myFlag')=false/true)
我的问题是,我是否可以使用MySqlParameterCollection显式地添加param值(true/false),或者必须自己将其烘焙到查询中?
(不是世界末日,因为它是一组固定的预定义值)。
谢谢,
罗伊。

最佳答案

我终于找到了一个可以接受的答案:
虽然我在MySQL.Data中找不到这样做的方法,但我能够从查询端解决这个问题:
可以使用CAST函数将JSON布尔值转换为数值(这就是MySQL布尔值)。
因此,既然您控制了查询的创建,那么您可以在参数为布尔值时使用cast函数
例如:

SELECT jdoc
FROM audits
WHERE CAST(JSON_EXTRACT(jdoc, '$.myFlag') AS UNSIGNED) = 0;

请注意,不能强制转换为任何MySQL类型,但数字签名/无签名的效果很好(请参阅cast doc)

10-08 01:50