Изменить все таблицы в базе данных с помощью одной команды

13

Существует ли однострочная или однострочная команда для изменения всех таблиц в базе данных. Я хотел бы выполнить эту команду в каждой таблице в базе данных:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

Моя цель - изменить кодировку от latin1 до utf8 для всех таблиц.

ОБНОВЛЕНИЕ: СУБД MySQL

Мар Cejas
источник

Ответы:

18

Нет, такой команды нет. Но что вы можете сделать, это написать быстрый запрос для генерации SQL для вас, например, так:

USE INFORMATION_SCHEMA;
SELECT 
CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET UTF8;") 
AS MySQLCMD FROM TABLES 
WHERE TABLE_SCHEMA = "your_schema_goes_here";

Затем вы можете запустить вывод из этого, чтобы сделать то, что вам нужно.

Источники:

http://forums.mysql.com/read.php?20,244395,244421#msg-244421

Mr.Brownstone
источник
Нет, нет способа сделать то, что вы хотите, в одной команде.
Мистер Браунстоун,
Чтобы заставить это работать под управлением MariaDB, по какой-то причине мне пришлось уйти WHERE TABLE_SCHEMA = "your_schema_goes_here"из команды.
Гвинет Ллевелин
2

Самый простой способ: экспортировать базу данных. Откройте экспортированную базу данных в текстовом редакторе и выполните поиск / замену на «UTF8» или что-то еще. Повторно импортировать исправленную базу данных.

Эндрю Смит
источник
1
Почему это самый простой способ? Что если вы не можете отключить вашу БД для изменения набора символов?
Дезсо
Потому что это не требует знаний SQL. Очевидно, что если вы не можете экспортировать базу данных: легкость и этот метод не будут иметь значения. Но если у вас достаточно прав для непосредственного редактирования базы данных, весьма вероятно, что вы также можете ее экспортировать.
Эндрю Смит
Это было лучшее решение в моем случае! быстрое решение, которое оказалось довольно удобным. Я работал в своем регионе, когда по какой-то причине в моей базе данных возникла ошибка «недопустимое сочетание параметров сортировки». +1.
evl183
1

Если вы работаете с MS SQL Server, существует недокументированная хранимая процедура ms_foreachtable, которую вы можете использовать. Используйте заменить имя таблицы на? в заявлении.

Так в вашем примере

EXEC ms_foreachtable 'ALTER TABLE [?] .....'
Кеннет Фишер
источник
В этой статье рассказывается о наличии ms_foreachtable в MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Марьям Арши