Преобразование базы данных MySQL для поддержки нескольких языков - PullRequest
2 голосов
/ 17 июля 2011

В настоящее время у меня есть база данных, и большинство таблиц и полей хранятся как latin1_swedish_ci.

Мои вопросы:

  1. Должен ли я использовать utf8_unicode_ci для таблиц и их полей?
  2. В чем разница между сопоставлением таблицы и поля?
  3. Могу ли я массово изменить все поля / таблицы на utf8_unicode_ci? (если это правильное сопоставление)
  4. Может ли произойти потеря данных в полях / таблицах?

Причина, по которой я хочу использовать utf8, заключается в том, что мне нужно хранить китайские и / или русские символы в базе данных.

1 Ответ

2 голосов
/ 17 июля 2011
  1. Я бы пошел на это. При работе с несколькими языками очень мало причин не использовать utf8.
  2. Набор символов таблицы и параметры сортировки используются в качестве значений по умолчанию для определений столбцов, если набор символов столбца и параметры сортировки не указаны в определениях отдельных столбцов.
  3. Если у вас нет отдельных параметров сортировки / наборов символов в полях, вы можете написать простой сценарий, который просматривает все таблицы и вызывает проблемы ALTER TABLE tablename CONVERT TO CHARSET utf8;. Если в ваших полях есть пользовательские наборы символов / сопоставления, вам придется выполнить оператор MODIFY COLUMN. Вы можете легко идентифицировать тех, кто запрашивает таблицу information_schema.columns после конвертации.
  4. Да, если данные не могут быть представлены в utf8 (что маловероятно с учетом вашего текущего сопоставления), данные могут быть повреждены. Кроме того, если вы сохранили текст utf8 в столбцах, которые на самом деле не были utf8, преобразование этих полей приводит к чему-то вроде двойной кодировки utf8, что довольно неудобно для очистки. Если вы знаете, что столбец неправильно используется для истории utf8, вы можете преобразовать его в bin & затем в utf8, чтобы предотвратить преобразование / двойное кодирование.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...