Поиск против свойства в объекте JSON с использованием MySQL 5.6

Короче говоря: я использую MySQL 5.6 (на данный момент невозможно обновить до более новой версии и использовать улучшенные возможности JSON), и у меня есть столбец, в котором хранится JSON.

Примеры объектов JSON, хранящихся в базе данных:

-- Row #1 (`options` column) {"name": "Test", "description": "Some description", "type": "post", "scheduled": true, "deleted": false, "timestamp": "1482263883"} -- Row #2 (`options` column) {"name": "", "description": "Some description test", "type": "post", "scheduled": true, "deleted": false, "timestamp": "1482263883"} 

Проблема: я хочу, чтобы иметь возможность выполнять поиск по записям в отношении свойства name хранящегося в моем объекте JSON.

 SELECT * FROM `my_table` WHERE ((`options` LIKE '%"name":"%Test%"%')) 

Вышеприведенный запрос работает отлично, но иногда он может возвращать ложные срабатывания (например, будет возвращена вторая строка, а также содержит строку «test» в свойстве description ).

Некоторые примечания:

  1. Объект, хранящийся в столбце options точно такой же для каждой строки, например, свойство name расположено в первой позиции для каждой записи.

Вы можете использовать регулярное выражение вместо LIKE . Это позволяет использовать шаблон, который не будет пересекать границы строк, в отличие от шаблона % в LIKE

 SELECT * FROM my_table WHERE options REGEXP '"name": *"[^"]*Test' 

Однако вместо полученного ложного значения это может привести к ложному отрицанию, если строка содержит:

 "name": "This is a \"quoted\" Test" 

потому что [^"]* не будет пропускать скрытые кавычки.

Возможно, есть какой-то способ уточнить регулярное выражение, чтобы это сделать, но это будет непросто.