在mysql json数据类型中使用重音字符进行搜索

wko9yo5t  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(328)

我有一个表,它的列类型是json类型。我想在这个领域做一个文本搜索,但它似乎是明智的搜索口音。
以下是一些基本的mysql查询:

SELECT '["étoile", "foo"]'  LIKE '%etoil%'; -- return 1
SELECT '["étoile", "foo"]'  LIKE '%étoil%'; -- return 1

结果与json类型不同

SELECT CAST('["étoile", "foo"]' AS JSON) LIKE '%etoil%'; -- return 0
SELECT CAST('["étoile", "foo"]' AS JSON) LIKE '%étoil%'; -- return 1

我也尝试过使用mysql json函数,

SELECT JSON_SEARCH( CAST('["étoile", "foo"]' AS JSON), 'all', '%etoil%'); -- return NULL
SELECT JSON_SEARCH( CAST('["étoile", "foo"]' AS JSON), 'all', '%étoil%');-- return "$[0]"

无法在json数据字段上指定字符集。
此时,解决方案是将列从json类型恢复为基本文本列(仍然包含json,但没有mysql验证)。
有没有可能使查询对json数据类型字段中的重音不敏感?

vybvopom

vybvopom1#

尝试:

SELECT
  COLLATION(`json_value`),
  `json_value` LIKE '%etoil%',
  `json_value` LIKE '%etoil%' COLLATE utf8mb4_0900_ai_ci,
  JSON_SEARCH(`json_value`, 'all', '%etoil%'),
  JSON_SEARCH(`json_value`, 'all', '%etoil%' COLLATE utf8mb4_0900_ai_ci)
FROM `tbltest`;

见db小提琴。

相关问题