Как изменить все таблицы в моей базе данных на набор символов UTF8? - PullRequest
29 голосов
/ 28 января 2010

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

Ответы [ 4 ]

39 голосов
/ 28 января 2010

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

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

14 голосов
/ 28 января 2010
mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql
sed -r 's/latin1/utf8/g' dump.sql > dump_utf.sql
mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql --user=username --password=password --default-character-set=utf8 dbname < dump_utf.sql
10 голосов
/ 19 января 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';

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

0 голосов
/ 20 марта 2019

Еще лучше, используйте набор инструментов 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%';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...