it-swarm.com.ru

Неверный текст JSON в аргументе 2 - json_contains в MySQL 5.7.8

У меня есть база данных с одним столбцом, который является JSON строк (например, ["ART", "LIT"] и т.д.). Я хочу найти его, используя json_contains.

Тем не менее, когда я пытаюсь:

json_contains(\`column_name`,"ART")

Это ошибка, говоря:

Недопустимый текст JSON в аргументе 2 для функции json_contains: "Неверное значение". в позиции 0 в "ART".

Обратите внимание, что json_contains не ошибается с числами вместо "ART", только со строками. Любая идея, что я могу сделать, чтобы исправить/обойти это?

9
Alex Beals

По-видимому, он обрабатывает целые числа иначе, чем строки. Хотя json_contains (`column_name`," 1 ") является допустимым вызовом, чтобы проверить, содержит ли он" ART ", вы должны использовать json_contains (` column_name`, "" ART "').

Это решило мою проблему!

14
Alex Beals

Если в именах столбцов хранятся только теги (одноуровневый массив), например ["ART", "LIT", "SPORTS"]

JSON_CONTAINS(column_name, 'ART', '$')

Если в имени столбца хранится массив значений ключа, например {"tag": "ART", "other": "NONE"}

JSON_CONTAINS(column_name, 'ART', '$.tag')

Наконец, если значение тега находится внутри родительского массива, вам нужно использовать путь следующим образом:

JSON_CONTAINS(column_name, 'ART', '$.parent.tag')

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-contains

1
Benjamin