Има 3 различни случая, които трябва да имате предвид:
Стойностите наистина са кодирани с помощта на Latin1
Това е последователният случай:декларираният набор от знаци и кодирането на съдържанието съвпадат. Това беше единственият случай, който обхванах в първоначалния си отговор.
Използвайте предложената от вас команда:
ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin
Обърнете внимание, че CONVERT TO CHARACTER SET
командата се появи само в MySQL 4.1.2, така че всеки, който използва база данни, инсталирана преди 2005 г., трябваше да използва трик за експортиране/импортиране. Ето защо има толкова много наследени скриптове и документи в Интернет, които го правят по стария начин.
Стойностите вече са кодирани с помощта на utf8
В този случай не искате mysql да преобразува никакви данни, трябва само да промените метаданните на колоната.
За това трябва първо да промените типа на BLOB, а след това на TEXT utf8 за всяка колона, така че да няма преобразувания на стойност:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8
Това е препоръчителният начин и е изрично документиран в Alter Документация за синтаксис на таблица .
Стойностите се използват в различно кодиране
Кодирането по подразбиране беше Latin1 в продължение на няколко години в някои дистрибуции на Linux. В този случай трябва да използвате комбинация от двете техники:
- Поправете метаданните на таблицата, като използвате трика с типа BLOB
- Преобразувайте стойностите с помощта на
CONVERT TO
.