Как преобразовать старую базу данных в форме mysql latin1 в utf8

У меня есть база данных в формате latin1, все сохраненные символы utf8 отображаются как ????

 +------+---------+-------+---------+--------------------+----------+--------------------      -----+---------------------+---------------------+---------+
 | id   | user_id | fname | lname   | designation        | location | email                    | created_at          | updated_at          | country |
 +------+---------+-------+---------+--------------------+----------+------------------------- +---------------------+---------------------+---------+
 | 6035 |    6035 | ????? | ??????? | ???????? ????????? |          |  [email protected]            | 2011-04-11 06:05:54 | 2011-04-10 06:13:04 | xxxxxxxxx |
 +------+---------+-------+---------+--------------------+----------+-------------------------+---------------------+---------------------+---------+

Теперь я использую эту команду и меняю формат базы данных и таблицы на utf8

  ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8;

  ALTER DATABASE <database_name> CHARACTER SET utf8;

Я читал, что latin1 использует 1 байт для каждого символа, а utf8 использует 3 байта для каждого символа. Мой вопрос: если я изменю свою таблицу (уже содержащую много данных) с формы latin1 на utf8, какие старые символьные данные будут потреблять 3 байта или 1 байт. Если я использую изменение и преобразование данных, будут ли у меня проблемы со старыми данными? Уверен, что новые данные будут в utf8.


person Abhay Kumar    schedule 08.08.2012    source источник


Ответы (1)


во-первых, вы должны попробовать:

SET NAMES 'utf8'
SET CHARACTER SET utf8

и ВЫБЕРИТЕ строку #6085, чтобы проверить, не повреждены ли записанные данные и не закодированы ли они в формате UTF8.

UTF8 (в отличие от UTF16) для обратной совместимости использует 1 байт для символов ASCII. Для других символов используется до 4 байтов (часто задаваемые вопросы по Unicode).

Вы не должны преобразовывать свои данные, если они уже сохранены в формате UTF8.


Предупреждение

  1. Попробуйте ALTER TABLE на резервной копии.
  2. ALTER TABLE блокирует вашу базу данных.
person Guillaume USE    schedule 08.08.2012
comment
БД доступна для чтения во время работы таблицы изменений, но обновление и запись невозможны. Я пробовал устанавливать имена и символы, но данные все равно отображаются как ??? - person Abhay Kumar; 08.08.2012
comment
Итак, я думаю, что ваши данные не могут быть преобразованы в utf8. Потому что они были вставлены коннектором latin1 в структуру latin1. - person Guillaume USE; 08.08.2012
comment
когда я использую команды CONVERT TO CHARACTER SET и Modify, он преобразует их, и я не вижу никаких ошибок, и все работает нормально. Хотя старые данные, недействительные данные utf8, не восстанавливаются - person Abhay Kumar; 09.08.2012