Как изменить все таблицы в моей базе данных на набор символов UTF8?

Моя база данных не в UTF8, и я хотел бы преобразовать все таблицы в UTF8, как я могу это сделать?


person nubela    schedule 27.01.2010    source источник


Ответы (4)


Для одной таблицы вы можете сделать что-то вроде этого:

ALTER TABLE tab CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Для всей базы данных я не знаю другого метода, кроме похожего на этот:

http://www.commandlinefu.com/commands/view/1575/convert-all-mysql-tables-and-fields-to-utf8.

person Tomasz Zieliński    schedule 27.01.2010
comment
Те, у кого нет доступа к командной строке, могут быстро запустить SHOW TABLES; в своей базе данных, вставить их в NimbleText на странице nimbletext.com/live, а затем используйте этот шаблон для создания сценария изменения: ALTER TABLE `$0` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci; - person jocull; 05.11.2013
comment
Это подать заявку на базу данных 125 МБ? ' - person ValRob; 12.06.2018

замените my_database_name именем своей базы данных

SELECT CONCAT('ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database_name' AND TABLE_TYPE != 'VIEW';

это создаст множество запросов, которые вы можете запустить

person Thu 01 Jan 1970 000000 GMT    schedule 19.01.2018
comment
Вы также должны добавить `AND Table_Type! = 'VIEW' ' - person Smith; 10.04.2018
comment
В то же время я бы посоветовал перейти не на utf8, а на utf8mb4, чтобы можно было сохранить символы астрального плана, такие как смайлики. - person Michael Scott Cuthbert; 23.11.2018

А еще лучше использовать набор инструментов Percona. Я бы проверил ваши индексы перед обновлением до utf8mb4, поскольку есть проблемы с длиной ключа.

SELECT CONCAT('pt-online-schema-change --alter "CONVERT TO CHARACTER SET utf8 
COLLATE utf8_unicode_ci" t=', TABLE_NAME, ',D=DB_NAME,u=USER_NAME --statistics --execute') 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'DB_NAME' AND TABLE_TYPE != 'VIEW' AND TABLE_COLLATION NOT LIKE '%utf8%';
person tippingpints    schedule 20.03.2019

person    schedule
comment
И, надеюсь, ваша база данных не содержит latin1 внутри какого-либо контента, такого как сообщения в блогах о кодировке символов ... иначе у ваших пользователей могут быть основания для судебного процесса, если ваш сайт преобразования сообщений внезапно предлагает ошибочные команды базы данных! - person Charlie Gorichanaz; 15.05.2014
comment
после sed: uconv --from-code latin1 --to-code utf8 dump_utf.sql ›dump_utf_fixed.sql - person scribe; 05.06.2015
comment
@marcolopes The s tream ed itor. man sed или поищите его в Википедии и т.п. - person Nick T; 04.12.2017
comment
@marcolopes что-то она седла =) - person Eli; 25.04.2019