Mysql і російська кодування, замітки розробника

Проблема виникає, якщо ви працюєте з кодуванням, відмінною від UTF-8, і зберігайте в базі даних тексти, наприклад, в кодуванні cp1251. Але MySql не завжди використовує за замовчуванням кодування cp1251, зокрема, не завжди за замовчуванням використовується це кодування для з'єднань з базою. Через це виникають ситуації, коли в базі тексти зберігаються в нормальному Новомосковскбельном вигляді, але при виведенні цих даних на сайт з'являються одні лише «кракозябли» (знаки питань замість букв - «.»).

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

Це зазвичай допомагає. Єдина незручність, що кожен раз будуть виконуватися ці надлишкові, по суті, запити (хоч як крути, а це додаткові навантаження на сервер, хоча припускаю, що досить мізерні). Ще бувають ситуації, коли немає можливості прописати ці рядки після кожного конекту, якщо ви, наприклад, використовуєте якусь програму, що працює безпосередньо з базою даних і не має відповідних налаштувань в собі.

На серверах, які надають послуги хостингу для російськомовних сайтів, найчастіше все в порядку і такої проблеми немає (тому що у них за замовчуванням MySql налаштований на роботу в першу чергу з кодуванням cp1251). Якщо ваш сайт використовує іноземний хостинг, то, швидше за все, єдиним способом вирішення проблеми буде спосіб, описаний вище.

Але якщо ж ви маєте можливість підкоригувати конфиг MySql на сервері, тоді є ще одне рішення, реалізацію якого я з радістю для себе виявив (я-то «здогадувався», що можна якось змінити налаштування самого MySql, але як це зробити, не знав) 🙂

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

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

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

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

default-character-set = cp1251
character-set-server = cp1251
collation-server = cp1251_general_ci
init-connect = "SET NAMES cp1251"
skip-character-set-client-handshake

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

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

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

Тепер я можу використовувати свій локальний сервер на XAMPP (ну не подобається мені Денвер ...) більш комфортно 🙂 Також це прекрасно спрацювало на «саморобному» сервері під SUSE.

Все, я все зробив ... І здається все зрозумів ... 💡 Сподіваюся правильно ... 😀

Краще б написали статтю як воно все працює ❗. на пальцях, ніж давати відповіді на питання «Як зробити щоб запрацювало»

Начебто в БД все зберігається в тій кодуванні в якій це все туди запихати, і відповідно і з'єднання з бд і кодування самої сторінки сайту повинна бути такою ж. Хоча є винятки 😯 😯 😯 ❗ ❓

А ось у мене нічого не виходить 🙁
Я скористався порадою, робив запити на cp1251, utf8, latin1, cp866-не виходить. Ставив useUnicode = truecharacterEncoding = utf8 (сторінки в ЮТФ і в Ансі пробував)-нічого. В консолі написав set names utf8 і спробував записати по-російськи-нічого, тільки binary і latin1.
Не знаю що робити. У мене 5-й мускул ...

кажуть, що все треба писати на ЮТФ. А як?

Може хто-небудь підкаже як у флешроліках поміняти кодування на російську. Наприклад на boxedart в шаблоні сайту
Хідер на флеш. Так ось там слова завантажуються через екшнскріпт як змінні які можна змінювати. І ось питання: як поставити значення змінних російською. Коли намагався це зробити виходили порожні поля. Якщо хто знає рішення то підкажіть плиз.

А я б пі * й давав усім хто ще використовує CP-1251. Ось серйозно, звідси всі проблеми. Давно пора вже визнати UTF8 міжнародним стандартом і використовувати його. А з перекодуванням туди сюди ваших проектів на CP1251 які до мене потім потрапляють, ось чес слово, вбив би.

«Можна якось змінити налаштування самого MySql, але як це зробити, не знав)»
- Ezo, ти звертайся, якщо що. Я в першу чергу все-таки UNIX адмін, а потім вже програміст 🙂

Допомогли поради для mysql кодування cp1251
Але ось у самого сервера чи потрібно змінювати кодування з utf8 на cp1251?
Чому то при locale відображає всюди POSIX