Советы по миграции MySQL в UTF/Unicode
-
09-06-2019 - |
Вопрос
Есть ли у кого-нибудь какие-либо советы или моменты, на которые следует обратить внимание при попытке перенести таблицы MySQL из шведской кодировки без учета регистра или кодировки ascii по умолчанию в utf-8?Некоторые из проектов, в которых я участвую, направлены на лучшую интернационализацию, и база данных станет важной частью этих изменений.
Прежде чем мы приступим к изменению базы данных, мы собираемся преобразовать каждый сайт для использования кодировки символов UTF-8 (от наименее критической до наиболее важной), чтобы гарантировать, что все входные/выходные данные используют один и тот же набор символов.
Спасибо за любую помощь
Решение
Некоторые подсказки:
- Твой
CHAR
иVARCHAR
столбцы будут использовать в 3 раза больше дискового пространства.(Вероятно, для шведских слов вам не понадобится много места на диске.) - Использовать
SET NAMES utf8
перед чтением или записью в базу данных.Если вы этого не сделаете, вы получите частично искаженные символы.
Другие советы
Я собираюсь просмотреть следующие сайты/статьи, чтобы помочь найти ответ.
Часто задаваемые вопросы по UTF-8 и Unicode
Эпизод HanselMINUT "Разбираемся в интернационализации с Майклом Капланом"
И еще я только что нашел очень актуальный пост Дерека Сиверса в блоге O'Reilly ONLamp, когда писал это. Преобразование данных MySQL из Latin1 в utf8 utf-8
Остерегайтесь ограничений длины индекса.Если таблица структурирована, скажем:
VARCHAR (255) B VARCHAR (255) КЛЮЧ ('A', 'B')
Вы преодолеете ограничение в 1000 байт на длину ключей.255+255 — это нормально, но 255*3 + 255*3 не подойдет.
Твой
CHAR
иVARCHAR
столбцы будут использовать в 3 раза больше дискового пространства.
Только если они набиты латиницей-1 с порядковыми номерами > 128.В противном случае увеличение использования пространства UTF-8 будет минимальным.
Сопоставления не всегда выгодны.Вы получите умлаты, сопоставленные с неумлатированными версиями, что не всегда правильно.Возможно, вы захотите использовать utf8_bin, но тогда все также будет чувствительно к регистру.