使用mysql JSON数据类型中的重音字符搜索

时间:2018-11-16 10:05:49

标签: mysql json full-text-search

我有一个表,其中的列类型为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数据类型字段中的重音不敏感?

1 个答案:

答案 0 :(得分:0)

尝试:

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-fiddle