[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с кодировкой - ситуация тупиковая по фору
Arbios
Добрый вечер! Есть небольшой сайт с базой данных, в базе хранится всего 4 таблицы, да и сам сайт очень легкий и простой.
Сайт был полностью на английском языке, я начал его потихоньку русифицировать, и вот дошел до того, что мне нужно было переименовать существующие разделы с англ. названий на русский. Поначалу если там написано слово "Pizza" я переименовывал в "Пицца" и на выходе получал "?????". Потом я обратился к своему хостеру, там сказали что проблема была в базе и он всё исправил, мол причина не в хостинге. И вот я начал дописывать и другие категории, написал:
"Пицца" - работает
"Фаст фуд" - работает
"Суши и роллы" -
Цитата
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (cp1251_general_ci,COERCIBLE) for operation '='' in /home/users2/g/username/domains/example.ru/subsite/controllers/ControllerCategory.php:131 Stack trace: #0 /home/users2/g/username/domains/example.ru/subsite/controllers/ControllerCategory.php(131): PDOStatement->execute(Array) #1 /home/users2/g/username/domains/example.ru/subsite/category_update.php(14): ControllerCategory->getCategoriesByCategory('???????????????...') #2 {main} thrown in /home/users2/g/username/domains/example.ru/subsite/controllers/ControllerCategory.php on line 131

Путем долгих мучений выяснил что ошибка вылетает только когда пишешь букву "ш" в нижнем регистре и букву "И" в верхнем.

Ошибка указывает на конфликт кодировок как я понял, но нету там ничего кроме UTF-8, хоть убей.

В свою очередь менял писал всякие set names utf-8, меня всю кодировку базы на utf8_general_ci (также utf8_unicode_ci), в коде php заменял всё на "1251" потому что UTF-8 там и так стоит, в общем перепробовал все способы хоть как то связанные с кодировкой.

Потом решил я установить это дело на денвер, захожу в 127.0.0.1 и вижу полстраницы в �����, ну ладно с кем не бывает, захожу в ПМА, там все нормально, меняю кодировку хрома с UTF-8 на 1251 и о чудо ����� исчезли и всё хорошо, что не скажешь о PhpMyAdmin. Это так для справки.

Пробовал заходить на сайт и с MacMini, то же самое, буква "И" и "ш" вне закона. Боятся что я напишу слово "гашиш"?
Даже незнаю что и делать, может это из за санкций? сарказм
inpost
Arbios
Отличный вариант всё переписать на UTF-8, текст перенабрать, таблицы перевести в utf-8.
Как выставить кодировку UTF-8 правильно я у себя в блоге записал:
http://school-php.com/tricks/read/18/vyist...kodirovku-utf-8


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Arbios
Цитата (inpost @ 16.11.2014 - 00:03)
Arbios
Отличный вариант всё переписать на UTF-8, текст перенабрать, таблицы перевести в utf-8.
Как выставить кодировку UTF-8 правильно я у себя в блоге записал:
http://school-php.com/tricks/read/18/vyist...kodirovku-utf-8

Уже пробовал, не помогает
inpost
Arbios
Что конкретно не помогает? Текст заново вносил? Кодировку везде выставил? А если найду?

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Arbios
Цитата (inpost @ 16.11.2014 - 06:19)
Arbios
Что конкретно не помогает? Текст заново вносил? Кодировку везде выставил? А если найду?

На Денвере к примеру проблема решилась командами:

mysqldump --user=username --password=password --default-character-set=latin1 --skip-set-charset dbname > dump.sql

sed -r 's/latin1/utf8/g' dump.sql > dump_utf.sql

mysql --user=username --password=password --execute="DROP DATABASE dbname; CREATE DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;"

mysql --user=username --password=password --default-character-set=utf8 dbname < dump_utf.sql

Но на хостинге даже через SSH нивкакую(
inpost
Мне нечего добавить. Там 11(!) пунктов по настройке UTF-8 везде. Ты же говоришь, что только в БД меняешь...

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
I++
inpost

Хорошая статья по кодировкам.

Arbios
Могу предположить, что нужно сделать дамп базы, потом открыть дамп например в notepad++ перекодировать в UTF-8 без bom и проставить при создании таблицы кодировку UTF-8
остально решать через mysql_set_charset('utf8'); или если PDO то как в статье.

Обычно все эти косяки с кодировкой, у веселых хостеров, но обычно пару костылей в виде того, что у inpost'а в статье достаточно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.