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


13

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

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

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

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

Ответы:


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


Нет, нет способа сделать то, что вы хотите, в одной команде.
— Мистер Браунстоун,

Чтобы заставить это работать под управлением 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
— Марьям Арши
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.