Главная > Программирование > Замена подстроки в MySQL

 

Замена подстроки в MySQL

Недавно столкнулся с небольшой проблемой: на одном сайте во всех записях, и вообще, ВО ВСЁМ, нужно было заменить подстроку, для ясности например 'строка 1' на 'строка 2'. Сайт работает на WP, значит надо поменять 'строка 1' на 'строка 2' в его базе - и дело с концом. Но я был слабо знаком с MySQL и не знал, что сделать это не тау-то просто.

Что прочитал. В MySQL поменять 'строка 1' на 'строка 2' можно двумя способами.

1. Поменять значение определённого поля в определённой таблице. Для этого нужно выполнить запрос:

UPDATE имя_таблицы
SET имя_поля = REPLACE (имя_поля, 'строка 1', 'строка 2');

но если мы не знаем в какой таблице и в каком поле искать?

2. Выполнить запрос для замены по всей таблице (это я прочитал, но сам не пробовал):

UPDATE
    `table`
SET
    `mail` = 'строка 2'
WHERE
    `mail` = 'строка 1'

 но это опять же надо знать имя таблицы.

Замена с помощью регулярных выражений в MySQL почему-то не предусмотрена. Не знаю, почему так сделали разработчики, но не продумать механизм замены в MySQL - как-то глупо. Конечно, можно перебрать все поля всех таблиц, но хотелось сделать красиво. И вот как сделал.

На сайте, где находится эта база, заходим в phpMyAdmin и экспортируем эту базу себе на компьютер. После того, как нажали "Экспорт":

а) на всякий случай включите способ экспорта "обычный", чтобы там отобразились все настройки:

Чтобы видеть параметры экспорта

б) когда настройки отобразятся, проверьте, чтобы выходной файл был в формате .sql, а не в .zip или другом каком-нибудь:

таблицу надо экспортировать в формате sql

На странице экспорта нажимаем внизу кнопку OK  - и таблица сгружается на ваш компьютер.

Далее: открываем таблицу любым текстовым редактором. Здесь ВНИМАНИЕ!!! Настоятельно рекомендуется редактор Notepad++ ! Если у вас его ещё нет - скачайте и установите (найти очень легко в любом поисковике по одноимённому запросу). Просто в обычном блокноте возможны проблемы с кодировкой при сохранении изменений - ничего хорошего из этого не выйдет.

Итак, предполагается, что вы открыли вашу базу в формате .sql редактором Notepad++.

Нажимаем Ctrl-F, открывается окно поиска и замены. Переходим на вкладку "заменить" (видно на рисунке), и пишем что заменить и на что ('строка 1' на 'строка 2'). Нажимаем кнопочку "Заменить всё"

база открыта в редакторе Notepad++

Вот и всё, замена во всей базе произведена. Сохраняем изменения (Ctrl-S). Далее в том же phpMyAdmin удаляем все таблицы из базы на сервере (саму базу оставить!!!) и импортируем нашу новую исправленную базу, в которой выполнена необходимая замена.

Вот и всё. Такой вот немного извращённый метод, но позволяет ускорить в разы процедуру замены подстроки в MySQL.

 

Программирование

  1. Пока что нет комментариев.
  1. Пока что нет уведомлений.