Кодування таблиць mysql

Дуже часто при перенесенні бази даних MySQL починаються проблеми з кодуванням виведеної інформації на сайті. Це може бути через відмінності у версіях програмного забезпечення, операційних систем, на яких працює сервер або просто через відмінності в настройках.

Рішення проблеми Кодирова бази MySQL досить просте - досить просто встановити на сайт скрипт PhpMyAdmin і вписати всього лише кілька команд, які потрібно буде відправити MySQL.

Розберемо завдання більш детально, що б кожен зміг знайти собі відповідний варіант і виправити проблеми. Особисто у мене був випадок зовсім недавно, що при перенесенні сайту про декор дзеркал і скла при перенесенні з локального комп'ютера в Інтернет, на сторінках всесто статей з'явилися кубики і вопросики. Що робити, сам не знав, поки не прочитав кілька корисних статей. Раді звідти вирішив зібрати на одній сторінці. Користуйтеся!

на FreeBSD

  • mysqldump -u -p -default-character-set = cp1251 dbname tablename> dump_table.sql

Для того, що б завантажити файл з даними із належним кодуванням, необхідно вставити в самий початок файлу кілька рядків, які як раз вкажуть MySQL, яке кодування необхідно використовувати:

  • SET NAMES cp1251;
  • SET CHARACTER SET cp1251;

Потім я скачав файл собі на комп'ютер, а тут вже через mysql.exe імпортував його в свою локальну базу даних. Відкриваю в MySQL Query Browser, український текст! Ура! Але це ще тільки початок ... Удалил пару рядків. Зворотний експорт в MySQL 4.0 не вийшов. Точніше вийшов, тільки китайський. MySQL Administrator з цим теж не впорався, хоча налаштування все вірні.

Пробуємо наступну команду через консоль MySQL:

  • mysqldump -u -p dbname tablename> dump_table.sql

Повинно допомогти. Якщо ж причина не виправлена, продуем інші варіанти.

MySQL і російська кодування WINDOWS-1251

Сьогодні ми розглянемо, що потрібно написати в файлі конфігурації /etc/my.cnf для того, щоб налаштувати mysql стандартної збірки на роботу з кодуванням utf8 за замовчуванням без всякої перекомпіляції.

Розглянемо приклад конфіга на основі MySQL 5.x.

В розділ [mysqld] необхідно додати наступне:

  • default-character-set = utf8
  • character-set-server = utf8
  • collation-server = utf8_general_ci
  • init-connect = "SET NAMES utf8"
  • skip-character-set-client-handshake

Дві останні рядки примусово встановлюють кодування utf8 для всіх запитів.

В розділ [mysqldump] досить додати тільки

Цього достатньо, щоб MySQL працював з windows-1251 кодуванням за замовчуванням.

Якщо ж при імпорті бази даних замість українських літер видаються ієрогліфи або знаки питання, це значить, що дамп був зроблений в кодуванні, відмінною від utf8. Переробіть дамп в utf8 або перекодуйте його в потрібне кодування за допомогою утиліт iconv або recode. У мене після цих процесів сайт-магазин, де продається плівка для дзеркал і скла став працювати коректно.

Кодування запитів MySQL

Отже, за замовчуванням для всіх об'єктів бази встановлюється кодування latin1, і якщо в поле з такою кодуванням запхати українські дані, то замість символів Ви будете бачити знаки питання. Для уникнення даної проблеми досить встановити при створенні бази потрібну Вам кодування:

  • CREATE DATABASE yourbase CHARACTER SET 'cp1251'

В цьому випадку всі поля за замовчуванням будуть мати саме це кодування, якщо при створенні бази або поля й вказати іншу. Тобто, при створенні бази з нуля досить укзано її кодування і все буде нормально. Але якщо Ви вносите вже створену раніше базу, то зміна її кодування не приведе до зміни кодувань вже створених полів - їх доведеться міняти вручну, за допомогою такої команди:

  • ALTER TABLE students CHANGE name name varchar (100) CHARACTER SET 'cp1251'

Типи полів треба залишити колишніми, потрібно тільки змінити кодування (CHARACTER SET).

Для коректної роботи з кодуваннями залишилася одна річ - після встановлення з'єднання необхідно вказати необхідне кодування за допомогою запиту:

До речі, повний список кодувань, які підтримує Ваш сервер, можна отримати за допомогою комманди

Кодування UTF8

Для того, що б створити базу даних MySQL, досить просто знати кілька особливостей роботи в СУБД.

Далі потрібно змінити кодування для таблиць, створюваних за замовчуванням (якщо база не порожня, то кодування існуючих таблиць залишиться колишньою). Це можна зробити SQL-запитом:

  • ALTER DATABASE `gb_rek_jabber` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Книги та самовчителі MySQL

Нарешті, раджу скачати і прочитати (ну або хоча б залишити до кращих часів на комп'ютері) кілька самовчителів по MySQL і мови запитів зокрема. Там і про кодування в MySQL є!