Конвертуємо базу даних в mysql

Здавалося б завдання просте, виконай для кожної таблиці запит:

ALTER TABLE '. $ TableName. 'CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

і справа зроблена! Однак, не все так просто і є такі моменти, на які варто звернути увагу:

В MySQL для кодувань існує 2 поняття CHARACTER і COLLATE і тут 2 моменти:

  • для таблиці цілком - це різні значення (кодування зберігання даних в полях без вказівки кодування І кодування порівняння даних в полях таблиці)
  • для поля таблиці - однакове значення (кодування зберігання даних)

1. CONVERT TO CHARACTER SET може зробити з даних - вопросики (якщо в новому кодуванні не підтримуються символи старої кодування). Тому, можливо не варто робити конвертацію, а досить змінити тип звірки даних:

ALTER TABLE '. $ TableName. 'COLLATE = utf8_unicode_ci;

2. конверт потрібно тільки ті таблиці, які вже не utf8, адже може бути кодування полів в цій таблиці вказана Спеціально не utf8 (наприклад щоб зменшити надмірність даних, адже utf8 під кожен символ використовує 2 байти, а не 1 як в інших кодуваннях)

3. крім самих таблиць, потрібно перевірити кодування текстових полів, щось на зразок такого:

це потрібно, щоб правильно розрулити конвертацію кодувань, наприклад: utf8_bin, latin1, utf8, приклад таблиці:

особливо важливо конвертування utf8_bin поля в utf8, так наприклад у мене запит:

пояснюю: поле utf8bin було унікальним, з урахуванням регістра символів, а ми його спробували привести до кодуванні що не підтримує cs (case sensetive - до регістру залежність)

4. зверніть увагу, що переходячи з utf8_general_ci на utf8_unicode_ci ми розширюємо таблицю символів, тут проблем немає, але розширюємо ми її все-таки не до utf8_bin, тому питання ci або cs залишається відкритим.

Схожі статті