Кодування таблиць 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 є!