У меня есть база данных MySQL 8.0.20 с таблицей, в которой описаны метаданные о загруженных файлах изображений. Один столбец содержит объект JSON с целым набором автоматически сгенерированных данных, которые я пытаюсь очистить.
Этот JSON объект иногда содержит один или more имена ключей переменных, соответствующие заданному шаблону c. Что-то вроде
{
"image_name": "P10043983",
"image_size": "60138",
"image_original_exifdata": "{
'FileName':'P10043983.jpg',
'MimeType':'image/jpeg',
'UndefinedTag:0xA435':'\u0000\u0000\u0000\u0000\u0000\u0000'
}"
}
Это UndefinedTag:0xA435
(со многими перестановками) является проблемой. Это относится к различным деталям Exif изображения, таким как тип объектива, данные GPS и т. Д. c. Это вещи, которые меня не интересуют и которые эти камеры в основном не предоставляют, поэтому я получил таблицу, полную длинных строк бесполезных символов, которые просто занимают место. Я хочу, чтобы эти JSON поля были убраны из соображений производительности и чистоты.
Есть ли способ выполнить запрос SQL, который использовал бы подстановочные знаки или регулярные выражения для поиска (и, в идеале, удаления) всех этих надоедливых переменные ключи? Я бы не хотел вручную составлять список всех возможных ключей "UndefinedTag" для поиска, и мне также не понравились результаты, когда я просто рассматривал все это как строку и выполнял вызовы REGEXP_REPLACE (иногда оставалось конечные запятые, которые сломали мой JSON и которые мне было трудно избежать / разрешить).
Я знаю, что некоторые из функций JSON, например JSON_SEARCH()
, принимают подстановочные знаки, но в нем явно говорится, что путь поиска может ' t end в подстановочном знаке (поэтому UndefinedTag:0x**
не допускается). Многие из функций, которые мне нужны (например, JSON_REMOVE()
), вообще не принимают подстановочные знаки. Черт, у меня даже были проблемы с поиском известных ключей, и я подозреваю, что это глупое двоеточие в имени ключа может иметь какое-то отношение к этому.
Итак, как я могу очистить свой table и удалите множество форм этой проблемы UndefinedTag ? Может быть, проще просто go вернуться к плану regex_replace и вместо этого заняться конечными запятыми?