Mysql
是否可以以不區分大小寫的方式在 MySQL JSON 數組中進行搜尋?
例如與表:
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 集群上執行
其他情況,當您不能更改數據並且必須有正確的結果時:
select id from test where json_search(UPPER(tags), 'one', UPPER('lorem%')) is not null
當然會慢一些,所以需要測試真實的數據大小
此問題與搜尋值不是 _ci 字元集有關。只要您的數據表排序規則是 _ci 並且您的搜尋參數也是 _ci,Json_search() 就允許不區分大小寫的搜尋。
要使用準備好的語句在儲存過程中解決此問題,我必須執行以下操作
SET @theQuery = "select * from `theTable` where json_search( `theTable`.`myJsonColumn`, 'all', CONVERT( ? USING utf8) COLLATE utf8_unicode_ci, NULL, '$.KeyName' ) IS NOT NULL"; prepare stmt from @theQuery; execute stmt using @searchValue; deallocate prepare stmt;
如果您需要了解有關 json_search 中參數的更多資訊,請參閱 json_Search 文件中的說明。
請注意,?Select-Query 內部是使用 @searchValue 參數的準備語句中的參數。
這比進行lower() 或upper() 轉換更有效,並且正如我注意到的,如果您使用lower() 或upper(),則無法指定要搜尋的鍵。