Как да променя всички таблици в моята база данни към 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
Прилага ли се за база данни от 125MB?' - 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 Редакторът на спотоци. man sed или го потърсете в Wikipedia или други подобни. - person Nick T; 04.12.2017
comment
@marcolopes нещо, което тя направи =) - person Eli; 25.04.2019