Обычно я использую ручной поиск, чтобы заменить текст в базе данных MySQL с помощью phpmyadmin. Я устал от этого, как я могу выполнить запрос, чтобы найти и заменить текст новым текстом во всей таблице в phpmyadmin?
Пример: найти ключевое слово domain.com
, заменить на www.domain.com
.
mysql
phpmyadmin
alyasabrina
источник
источник
Ответы:
Для
single table
обновленияОт
multiple tables
-Если вы хотите редактировать из всех таблиц, лучше всего взять
dump
и затемfind/replace
загрузить его обратно.источник
If you want to edit from all tables, best way is to take the dump and then find/replace and upload it back.
используйте sed на свалке для поиска / замены:sed "s:unwanted_text:wanted_text:g" dump.sql
Самый простой способ, который я нашел, - выгрузить базу данных в текстовый файл, запустить команду sed для замены и перезагрузить базу данных обратно в MySQL.
Все команды ниже - bash для Linux.
Дамп базы данных в текстовый файл
Запустите команду sed, чтобы найти / заменить целевую строку
Перезагрузите базу данных в MySQL
Очень просто.
источник
\/\/domain.com
sed -i
команда может выдатьunterminated substitute pattern
ошибку. Вы можете использоватьsed -i '' -e 's/oldString/newString/g' ./db.sql
вместо этого.Поместите это в php-файл и запустите, и он должен делать то, что вы хотите.
источник
Выполнение SQL-запроса в PHPmyadmin для поиска и замены текста во всех сообщениях блога WordPress, например, нахождение mysite.com/wordpress и замена его на mysite.com/news. В этом примере таблица tj_posts
источник
wp_posts
так выглядит запросUPDATE `wp_posts` SET `post_content` = replace(post_content, 'mysite.com/wordpress', 'mysite.com/news')
Другой вариант - создать операторы для каждого столбца в базе данных:
Это должно создать список операторов обновления, которые вы затем сможете выполнить.
источник
Как, например, если я хочу заменить все вхождения Джона Марком, я буду использовать ниже,
источник
phpMyAdmin включает в себя удобный инструмент поиска и замены.
Выберите таблицу, затем нажмите « Поиск» > « Найти и заменить».
Этот запрос занимает около минуты и успешно заменил несколько тысяч экземпляров
oldurl.ext
сnewurl.ext
в колонкеpost_content
Лучшая вещь об этом методе: вы проверяете каждый матч перед фиксацией.
NB Я использую phpMyAdmin 4.9.0.1
источник
Я считаю, что "swapnesh" ответ будет лучшим! К сожалению, я не смог выполнить его в phpMyAdmin (4.5.0.2), который, хотя и нелогичен (и перепробовал несколько вещей), постоянно повторял, что было найдено новое утверждение и что разделитель не найден…
Таким образом, я пришел к следующему решению, которое могло бы быть полезным, если вы испытываете ту же проблему и не имеете другого доступа к базе данных, кроме PMA…
Чтобы проверить ожидаемый результат, вы можете использовать:
источник
Если вы уверены, что ни одно из полей, подлежащих обновлению, не будет сериализовано, приведенные выше решения будут работать хорошо.
Однако, если какое-либо из полей, требующих обновления, содержит сериализованные данные, запрос SQL или простой поиск / замена в файле дампа прервет сериализацию (если в замененной строке не будет ровно столько же символов, что и в искомой строке).
Конечно, «сериализованное» поле выглядит так:
Количество символов в соответствующих данных кодируется как часть данных.
Сериализация - это способ преобразования «объектов» в формат, легко сохраняемый в базе данных, или простой перенос данных объекта между различными языками.
Вот объяснение различных методов, используемых для сериализации данных объекта, и почему вы, возможно, захотите это сделать, а также публикация, ориентированная на WordPress: Сериализованные данные, что это значит и почему это так важно? простым языком.
Было бы удивительно, если бы в MySQL был какой-то встроенный инструмент для автоматической обработки сериализованных данных, но это не так, и поскольку существуют разные форматы сериализации, для этого даже не имеет смысла делать это.
wp-cli
Некоторые ответы выше казались специфичными для баз данных WordPress, которые сериализуют большую часть своих данных. WordPress предлагает инструмент командной строки, wp search-replace , который делает сериализацию.
Основная команда будет:
Тем не менее, WordPress подчеркивает, что
guid
никогда не следует изменять , поэтому рекомендует пропустить этот столбец.Это также предполагает, что часто вы захотите пропустить
wp_users
стол.Вот как это будет выглядеть:
wp search-replace 'https://old-domain.com' 'https://shiney-new-domain.com' --skip-columns=guid --skip-tables=wp_users --dry-run
Примечание: я добавил
--dry-run
флаг, чтобы копирование-вставка не разрушала чью-либо базу данных автоматически. Убедившись, что скрипт выполняет то, что вы хотите, запустите его снова без этого флага.Плагины
Если вы используете WordPress, есть также много бесплатных и коммерческих плагинов, которые предлагают графический интерфейс для того же, в комплекте со многими дополнительными функциями.
Interconnect / it php script
Interconnect / предлагает скрипт php для обработки сериализованных данных: инструмент безопасного поиска и замены . Он был создан для использования на сайтах WordPress, но, похоже, его можно использовать в любой базе данных, сериализованной PHP.
Многие компании, включая сам WordPress, рекомендуют этот инструмент. Инструкции здесь, около 3/4 вниз по странице.
источник
Лучше всего, если вы экспортируете его как файл sql и открываете его в редакторе, таком как Visual Studio Code, и находите и перераспределяете ваши слова. я заменяю в 1 гигабайтном файле sql за 1 минуту на 16 слов, что в сумме составляет 14600 слов. это лучший способ. и после замены сохраните и импортируйте снова. не забудьте сжать его с помощью zip для импорта.
источник
Генерация запросов на изменение SQL (FAST)
mysql -e "SELECT CONCAT ('update', table_name, 'set', column_name, '= replace (', column_name, ',' 'www.oldsite.com' ',' 'www.newsite.com' '); ') Как оператор FROM information_schema.columns WHERE table_name LIKE' wp_% '"-u root -p your_db_name_here> upgrade_script.sql
Удалите весь мусор в начале файла. У меня было немного.
nano upgrade_script.sql
Запустите сгенерированный скрипт с опциями --force, чтобы пропустить ошибки. (МЕДЛЕННО - возьмите кофе, если большая БД)
mysql -u root -p your_db_name_here --force <upgrade_script.sql
источник
В случае предложений с заглавными и строчными буквами, мы можем использовать BINARY REPACE
источник