Изменение MySQL с кодировки latin1 на UTF-8 - PullRequest
3 голосов
/ 31 января 2011

Недавно я понял, что совершил большую ошибку и зашифровал вещи на внешнем интерфейсе в UTF-8 и на стороне БД в latin1.

Я думаю переключить свою базу данных MySQL на UTF-8.Есть ли «хорошая практика» выполнения такой процедуры?Любые рекомендуемые шаги, которые я могу предпринять?На какие подводные камни я должен обратить внимание?

Спасибо, Алекс

Ответы [ 3 ]

5 голосов
/ 31 января 2011

Основной (и наиболее распространенный) подводный камень - надежда на то, что ALTER DATABASE … DEFAULT CHARACTER SET или ALTER TABLE … DEFAULT CHARACTER SET изменит кодировку существующих столбцов.

Эти операторы влияют только на таблицы и столбцы, созданные после того, как вы выпустили эти операторы.

Вы должны ALTER каждая таблица отдельно, используя

ALTER TABLE mytable CONVERT TO CHARACTER SET UTF8;
3 голосов
/ 24 мая 2011

Я нашел один трюк в Интернете (так что это не мое, но я забыл, откуда я это взял), используя дамп с отсутствующей кодировкой, а затем повторно импортируя этот «пустой» дамп снова с правильной кодировкой.

Помогает, только если все данные в таблицах действительно в правильной кодировке (для повторного импорта) Если нет, вы потеряете данные: каждое значение поля будет усечено после первого недопустимого закодированного символа.

Я получил это для & szlig; персонаж. До сих пор не нашел способ обойти это. Я думаю, должно быть выполнимо с чем-то вроде «игнорировать символы работы» или схожим ...

Примеры шагов для таблицы MsSQL на латинице 1 с содержимым в кодировке utf-8 (для оболочки linux):

mysqldump --opt --quote-names --skip-set-charset --default-character-set=latin1 mydatabase > /tmp/dump.sql
mysql --default-character-set=utf8 mydatabase < /tmp/dump.sql
1 голос
/ 31 января 2011

Я нашел это по своим закладкам. Это немного устарело, но все еще может удовлетворить ваши потребности:

http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...