Поиск с акцентированными символами в типе данных mysql JSON - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть таблица со столбцом типа 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]"

Невозможно указать Charset в поле данных JSON.

На этом этапеРешением было бы вернуть столбец из типа JSON в базовый текстовый столбец (все еще содержащий JSON, но без проверки mysql).

Существуют ли возможности сделать запрос нечувствительным к ударению в типе данных JSONполе?

1 Ответ

0 голосов
/ 18 ноября 2018

Попробуйте:

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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...