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


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.