Помогите пожалуйста, проблема с кодировкой в MySql, Я вот создал сайт, на денвере, кодировку установил utf-8 но когда перенес сайт на сервер, там все некорректно отображается, ????????????? такие вопросики выводит вместе текста, и тогда я вручную переписал инфу в бд, вместе вопросиков (?????????) выводит квадратики (���������), И еще непереносит слово, все в одной строке выводится, например тект в контейнере <div>Здесь указан путь к бд</div> К контейнеру в css задан резмер 735px, но оно не принимает, и выводится в одной строке по горизонтали помогите пожалуйста решать проблему, заранее благодарен,,,
Переведите html файлы в UTF-8 (без BOOM), думаю, что возникнет вопрос как это сделать. Так, что отвечу сразу например Notepad++ в <meta /> теге так же указать utf-8 Также и базу (таблицы и поля) переведите в utf-8, если не переведено.
когда создаешь базу и таблицы в phpmyadmin есть такой пункт как сравнение или что-то в этом роде.в списке ты должен выбрать utf-8 general
В вопросах кодировки в БД utf-8 или windows-1251 многие для себя до конца и не определились. В windows-1251 и размер строки в таблице меньше и сортировка быстрее. Причем сами php скрипты и html или xml вывод у тебя могут быть в utf-8, а в БД строки могут храниться в windows-1251. Просто это требует некоторых плясок с бубном, о которых дальше расскажу. С utf-8 есть нюансик. В php строки хранятся в мультибайте в кодировке utf-8. mb_detect_encoding() возвращает "utf-8". НО, если вызвать mb_convert_encoding($str, 'windows-1251') (т.е. преобразовать из текущей кодировки в windows-1251) и mb_convert_encoding($str, 'windows-1251', 'utf-8') (т.е. преобразовать именно из utf-8 в windows-1251) получаются РАЗНЫЕ строки. И не только у меня. В нете много жалоб на глюки с utf-8 в php5 с mysql именно с кириллицей.
О плясках с бубном, или как я использую windows-1251 в БД при utf-8 в скриптах. 1. Таблицы и поля в БД создаешь со сравнением cp1251_general_ci. 2. При подключении к БД первым запросом выполняешь следующий mysql_query('set names cp1251', $DBLink); Это установит кодировку по умолчанию для сервера mysql в windows-1251. Это обязательно. 3. Строки, которые записываешь в БД и которые содержат кириллицу преобразуешь следующим образом mb_convert_encoding($str, 'windows-1251', 'utf-8'). 4. Строки, которые считываешь из БД и которые содержат кириллицу преобразуешь следующим образом mb_convert_encoding($str, 'utf-8', 'windows-1251'). Если строка гарантированно содержит только первые 128 символов ascii-таблицы (латиница, цифры, знаки) - преобразование смело можешь не делать. У меня все работает.
Ratenn Всё будет нормально работать и без плясок. Просто сразу после подключения к серверу б.д. пишется: mysql_query('SET NAMES utf8'); MySQL сам знает, в какой кодировке у него хранятся данные в таблицах. Ты же сам при создании таблиц указывал cp1251. Запросом SET NAMES ты указываешь серверу, в какой кодировке работает клиент (то есть PHP-скрипт твой) - в какой кодировке он отправляет данные в MySQL и в какой кодировке хочет получать данные от MySQL. Этого достаточно. MySQL сам автоматически будет переконвертировать данные из одной кодировки в другую, если кодировка таблиц отличается от той, которая указана в SET NAMES.
А вот у beki007 проблема несколько иная. У неё такая ситуация, что какой запрос SET NAMES не напиши - всё будут квадратики и вопросики. Просто изначально данные в б.д. внеслись с ошибкой и MySQL в этом случае не то, чтобы не знает кодировку данных, но знает не правильно... Полагаю, если написать SET NAMES latin1 (или не писать вообще), а потом средствами PHP переконвертировать из Windows-1251 в UTF-8 (как в твоём примере) - это должно сработать. Скорее всего, у beki007 кодировка таблиц и самой б.д. - latin1 (стандартная кодировка MySQL, которая по-умолчанию ставится при установке, то бишь Windows-1250). Но при записи данных в эту таблицу - PHP отправлял данные в кодировке cp1251. При этом MySQL не знал, что эти данные в cp1251, он думал, что там cp1250, потому что явного указания, в какой именно кодировке приходят данные - не было (т.е. не было запроса SET NAMES). MySQL, по сути, просто пихал поток байт "как есть" в таблицу - и всё. Получилась такая хрень, что MySQL уверен, что данные, которые записаны в таблицу, в кодировке latin1, однако на самом деле - там cp1251. А теперь мы ставим запрос SET NAMES utf8 и пробуем эти данные получить. MySQL получил команду отдавать данные в кодировке utf8 и он уверен, что в таблице данные в кодировке latin1. При выдаче данных он будет перекодировать из кодировки latin1 в кодировку utf8 данные, которые реально находятся в кодировке cp1251. Естественно, ничего путного из этого не выйдет. Чтобы исправить ситуацию с б.д., можно написать PHP-скрипт, который будет сперва считывать таблицы, не указывая SET NAMES, а потом пошлёт запрос SET NAMES, создаст новые таблицы и вставит в них данные уже в нужной кодировке.
Спасибо всем, тем который хотел помогать, Да думаю sobachnik прав, потомущо я пробовал все методы, но все таки не сработало, вот поэтому мне надо снова пересоздать базу, поскольку я еще не умею написать такой php скрипт. Спасибо всем
Что за бред, какие ты скрипты собрался писать? ) Ему базу и таблицы с колонками перевести надо, а он скрипты писать пошел))) Заходишь в phpMyAdmin: Нажимаешь на базу -> Операции -> Сравнение (выбираешь utf8_general_ci) жмешь ок. База теперь utf8 Далее жмешь на таблицу в базе -> Операции -> Сравнение (выбираешь utf8_general_ci) жмешь ок. Таблица теперь utf8 Теперь открываешь таблицу и выделяешь все столбцы и жмешь редактировать -> Сравнение (выбираешь utf8_general_ci) там где не utf8 и все жмешь ок. Теперь и База и таблицы и столбцы с таблицах имеют кодировку utf8, после всего этого переводишь файлы на utf-8 и после соединения с базой указываешь utf8 все теперь радуешься.