mysql - MySQL 'IN' 操作符在输入 JSON 值时的行为
问题描述
这个说法
select 'foo' in ('foo', 'bar');
按预期返回 1。
这个
select json_extract('["foo"]', '$[0]') = 'foo';
也按预期返回 1。
然而,这
select json_extract('["foo"]', '$[0]') in ('foo', 'bar');
意外返回 0。更奇怪的是,如果用附加引号编写
select json_extract('["foo"]', '$[0]') in ('"foo"', '"bar"');
它改为返回 1。但这不适用于简单的相等,因为
select json_extract('["foo"]', '$[0]') = '"foo"';
返回 0。
所以问题是:为什么“IN”和“=”只有在输入 JSON 结果时才会表现不同?
解决方案
版本相关。MySQL 5.7 需要额外的 JSON_UNQUOTE()。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=bcfea5bebdc270c77e1edbc2c384909f
https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=bcfea5bebdc270c77e1edbc2c384909f
推荐阅读
- python - 我收到“NameError:名称'int_to_roman'未定义”的原因是什么?我该如何解决这个问题?
- node.js - GraphQL错误无法执行更新查询
- java - 如何按属性类型对对象列表进行排序
- plot - 如何用 Julia 绘制 2 个函数
- gnuplot - xdata 时间中秒数为负数的意外行为
- c++ - 为什么我的类函数不使用我的全局变量?
- ios - TableViewCell 不会改变标签颜色
- excel - 如果文本包含,则添加加 1increment
- javascript - 如何修复在 JSON 文件中创建新对象?
- x86 - 如果返回值不适合 EAX 会怎样?