例如与表:
create table test (id int primary key, tags json);
insert into test (id, tags) values (1, '["Lorem ipsum", "dolor", "sit"]'), (2, '["foo", "bar"]');
这将匹配:
select id from test where json_search(tags, 'one', 'Lorem%') is not null
但这不会:
select id from test where json_search(tags, 'one', 'lorem%') is not null
理想情况下,我希望能够匹配这两种情况。
在 5.7.16 Percona XtraDB 集群上运行
其他情况,当您不能更改数据并且必须有正确的结果时:
当然会慢一些,所以需要测试真实的数据大小
此问题与搜索值不是 _ci 字符集有关。只要您的数据表排序规则是 _ci 并且您的搜索参数也是 _ci ,Json_search() 就允许不区分大小写的搜索。
要使用准备好的语句在存储过程中解决此问题,我必须执行以下操作
如果您需要了解有关 json_search 中参数的更多信息,请参阅 json_Search 文档中的说明。
请注意,?Select-Query 内部是使用 @searchValue 参数的准备语句中的参数。
Mysql 文档 - json_search()
Mysql doc - 排序规则
这比进行lower() 或upper() 转换更有效,并且正如我注意到的,如果您使用lower() 或upper(),则无法指定要搜索的键。
这可能是由于表或字段使用的排序规则造成的。如果它区分大小写,则“L”将不匹配“l”。为了知道排序规则,请运行:
SHOW CREATE TABLE test
不区分大小写的排序规则名称以“_ci”结尾。单击此处了解有关排序规则的更多信息。