Змініть всі таблиці в базі даних за допомогою однієї команди


13

Чи є одно- або однорядкова команда для зміни всіх таблиць у базі даних. Я хотів би видати цю команду в кожній таблиці в базі даних:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

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

ОНОВЛЕННЯ: RDBMS - це 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
Чому це найпростіший спосіб? Що робити, якщо ви не можете збити вашу БД, щоб змінити набір символів?
dezso

Тому що він не вимагає знань SQL. Очевидно, якщо ви не можете експортувати базу даних: простота і цей метод були б неактуальними. Але якщо у вас є достатня привілей безпосередньо редагувати базу даних, велика ймовірність, що ви також можете її експортувати.
Ендрю Сміт

Це було найкращим рішенням у моєму випадку! швидке виправлення, яке стало дуже зручним. Я працював у своїй місцевій місцевості, коли чомусь у моїй базі даних почалася помилка "незаконного поєднання порівнянь". +1.
evl183

1

Якщо ви працюєте з MS SQL Server, то існує недокументована збережена процедура ms_foreachtable, яку ви можете використовувати. Використовуйте заміну назви таблиці на а? в заяві.

Так у вашому прикладі

EXEC ms_foreachtable 'ALTER TABLE [?] .....'

Ця стаття розповідає про наявність ms_foreachtable в MYSQL MYSQL CLONE OF SP_MSFOREACHTABLE
Maryam Arshi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.