Добрый вечер! Есть небольшой сайт с базой данных, в базе хранится всего 4 таблицы, да и сам сайт очень легкий и простой.
Сайт был полностью на английском языке, я начал его потихоньку русифицировать, и вот дошел до того, что мне нужно было переименовать существующие разделы с англ. названий на русский. Поначалу если там написано слово "Pizza" я переименовывал в "Пицца" и на выходе получал "?????". Потом я обратился к своему хостеру, там сказали что проблема была в базе и он всё исправил, мол причина не в хостинге. И вот я начал дописывать и другие категории, написал:
"Пицца" - работает
"Фаст фуд" - работает
"Суши и роллы" - [quote]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[/quote]
Путем долгих мучений выяснил что ошибка вылетает только когда пишешь букву "ш" в нижнем регистре и букву "И" в верхнем.
Ошибка указывает на конфликт кодировок как я понял, но нету там ничего кроме 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, то же самое, буква "И" и "ш" вне закона. Боятся что я напишу слово "гашиш"?
Даже незнаю что и делать, может санкции? [i][size=50]сарказм[/size][/i]
Это самая большая глупость, которую ты только мог сделать.
Особенно при "постепенном" переводе, когда в таблице могут быть данные как на русском, так и на английском.
убеждаешься, что все таблицы имеют чарсет utf8. Посмотреть можно через SHOW CREATE TABLE
в РНР, в настройках работы с БД оставляешь только utf8
после этого работа с БД будет нормальной и простых вопросов не будет (кроме тех данных, которые ты уже загубил). Остается победить вопросы в ромбиках, что совсем просто - из своих скриптов отправляешь заголовок Content-type с кодировкой utf-8
Дело в том, что этот сайт чистый, на нем нету ничего, и после того как я выполнил что то вроде "в коде php заменял всё на "1251"" я ставлю заново и базу и php файлы, и ошибка возникает то, только когда я редактирую какой то материал на сайте, отображается всё отлично, но стоит мне отредактировать название категории и назвать его чем либо с буквой "ш" или "И" вылетает вышеупомянутая ошибка.