Важливо: для нових баз даних
Створення баз даних відбувається з кодуванням за замовчуванням CP1251 / CP1251_general_ci . Сайти на PHP 5, створені після 1 грудня 2007 року, працюють з цим кодуванням без додаткового налаштування.
Подальша інформація в статті має відношення до старих сайтів нашого хостингу, а також до інших mySQL клієнтів, які ви можете зустріти на нашому хостингу або у власних додатках.
Для баз існуючих клієнтів (до грудня 2007 року) або сайтів на PHP 4
Кодування бази даних (charset, collation) встановлює режим роботи з текстовою інформацією в базі. Кодування задається двома параметрами: charset - набір кодів символів, що розглядаються як текст і collation - правила роботи з цими символами (правила сортування, порівняння, переведення регістрів).
У mySQL 4 з'явилася можливість самостійно задавати кодування для таблиць і навіть для окремих полів таблиць.
На жаль, робота з різними кодуваннями в mySQL 4, 5 зроблена не цілком вдало. Ми можемо запропонувати два способи роботи.
Робота з кодуванням за замовчуванням
Типово на нашому хостингу встановлений charset - latin1, collation - latin1_binary. Порівняння кириличних літер проводиться за їх кодом по номеру. Це дозволяє робити наступне:
- Головне: Цей режим сумісний з усім ПЗ - старими і новими клієнтами, mySQL Front, PHP клієнтами, ODBC, і т.д., тобто досягається максимальна сумісність з усім тим, що працювало з mySQL 3х версій.
- Зберігання кириличних символів у всіх режимах здійснюється правильно.
- Сортування кириличних символів здійснюється правильно, окрім літер Ё, Ї і подібних (на жаль).
- На жаль, регістро-незалежне порівняння та перетворення регістрів для кириличного алфавіту в цьому режимі не працює. Пам'ятайте, це може призвести до непрацездатності програм, які розраховані на це!
Для того, щоб скористатися вказаним режимом, вам не потрібно вносити ніяких змін в код - просто створюйте базу і працюйте як звичайно.
Цей спосіб цілком підійде людям, яким досить описаної функціональності, або в тому випадку, якщо вирішити проблеми, викликані "коректною" роботою з кодуванням, не вдається.
Робота з правильним кодуванням (CP-1251)
Для роботи з правильним кодуванням вам потрібно за допомогою засобу управління базою, сумісного з mySQL 4/5, змінити кодування таблиць. Зручніше це робити відразу після створення таблиці, щоб поля наслідували це кодування автоматом.
Увага: не забувайте, що поміняти кодування таблиці після створення там полів недостатньо, переконайтеся, що поля теж мають правильне кодування!
Засоби управління можна скачати з сайту www.mysql.com , наприклад, mySQL Administrator .
- Головне: Цей режим не до кінця сумісний з ПЗ, розрахованим на роботу з mySQL 3, таким, як mySQL Front і т.п., також не завжди виходить нормально працювати з клієнтами - PHP, ODBC, і т.д. Якщо замість кириличних літер ви бачите знаки '?' - Ви потрапили саме в таку ситуацію.
Більшість питань можна вирішити, скориставшись ресурсами з програмування.
Зазвичай достатньо дотримуватися короткої поради (див. примітку 1).
- Зберігання та обробка кириличних символів у всіх режимах здійснюється правильно.
Увага: практика показує, що змінювати charset і collation на таблиці, яка вже має дані, марно - ви отримаєте '?' замість кириличних символів.
Примітка 1: Зазвичай для правильної роботи з кодуванням CP1251 досить дати наступні команди після з'єднання з базою (приклад для PHP):
Mysql_query ("set character_set_client ='cp1251'");
mysql_query ("set character_set_results ='cp1251'");
mysql_query ( set collation_connection ='cp1251_general_ci'");
Примітка 2: Для ODBC драйвера для mySQL до рядка підключення необхідно дописати наступний параметр:
Stmt = SET NAMES ' cp1251 '
Додаткова інформація
На жаль, служба підтримки не може надавати допомогу щодо вирішення проблем кодувань mySQL 4. Кількість засобів програмування і способів використання бази дуже велике, щоб описати кожен випадок.
Практика показує, що використання умовно - правильного сумісного режиму ( latin1/latin1_binary ), яке відбувається за замовчуванням, вирішує основну проблему роботи з кодуванням (сортування), і надає гарний рівень зворотної сумісності.
У разі проблем, ми можемо також рекомендувати вам користуватися базою mySQL 3.*, Для якої на нашому хостингу встановлено традиційно кодування cp1251 (Windows). Однак пам'ятайте, що в цьому випадку вам доведеться працювати з текстами в кодуванні cp1251 .