Должен ли я перенести базу данных MySQL с сопоставлением latin1_swedish_ci в utf-8 и, если да, то как? - PullRequest
7 голосов
/ 13 октября 2008

База данных MySQL, используемая моим приложением Rails, в настоящее время имеет параметры сортировки по умолчанию latin1_swedish_ci. Поскольку набор символов по умолчанию для Rails-приложений (включая мое) - UTF-8, мне представляется разумным использовать в базе данных сопоставление utf8_general_ci.

Правильно ли мое мышление?

Если это так, как лучше всего перенести параметры сортировки и все данные в базе данных в новую кодировку?

Ответы [ 4 ]

4 голосов
/ 13 октября 2008

UTF-8, как и любая другая схема кодирования Unicode, может хранить символы на любом языке, поэтому это отличный выбор кодовой страницы для вашей базы данных.

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

Общее сопоставление UTF-8 (я предполагаю здесь - я не знаком с MySQL в частности) используется для ситуаций, когда язык неизвестен и требуется некоторое простое упорядочение по умолчанию. Вероятно, это соответствует порядку кодовой точки Unicode, который почти наверняка не тот, который вам нужен, если вы храните шведский язык.

1 голос
/ 14 октября 2008

Если ваши существующие данные в базе данных ПРАВИЛЬНО закодированы в латинице 1, преобразование таблиц в utf8 (используя ALTER TABLE, как описано в документации) должно работать просто.

Тогда все, что нужно вашему приложению, - это продолжать делать то, что оно делало раньше. Если ваше приложение хочет использовать символы Юникода, оно должно установить кодировку подключения в utf8 и использовать utf8, но это его собственная проблема.


Проблема заключается в том, что большое количество дерьмовых веб-приложений исторически отправляли данные utf8 в mysql и указывали им обрабатывать их как латиницу1. MySQL отлично выполнит это и сохранит ненужные файлы в соответствии с инструкциями.

Преобразование таблиц из латиницы 1 в utf8 НЕ исправит эту ошибку, поскольку у вас действительно есть полный мусор. Исправлять их нетривиально, особенно если в течение всего времени жизни приложения оно обращалось к базе данных разных типов мусора.

1 голос
/ 13 октября 2008

Конвертировать в UTF-8 как кодировку.

Настройки сортировки используются только для сортировки и тому подобного. Выберите параметры сортировки, которые ожидают большинство ваших пользователей.

0 голосов
/ 26 сентября 2016

Используйте приведенный ниже запрос MySQL для преобразования вашего столбца:

ALTER TABLE users MODIFY description VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Чтобы увидеть полную информацию о вашем столе:

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