Данная "проблема" ждёт пользователей MySQL версии 4.1 и выше, которые никогда не пытались читать документацию. Первым делом нужно проверить, что установлено нужное сопоставление (collation) для текстовых полей в таблице. Именно в установленной кодировке хранятся данные. Если для полей выставлена "неправильная" кодировка, то измените её. В phpMyAdmin это можно сделать при редактировании столбца таблицы, выбрав нужное значение из списка Сравнений. Для русский символов это может быть, например, cp1251_general_ci (основная регистронезависимая cp1251). Для UTF-8 - utf8_general_ci. Теперь нужно выставить кодировку соединения с сервером. В MySQL есть выражение SET NAMES, предназначенное специально для этого: [sql]SET NAMES 'cp1251';[/sql] Выполнить данный запрос нужно сразу после подключения к серверу. PHP: <?php mysql_connect('server','user', 'pasw') or die('Connection error.'); mysql_query("SET NAMES 'cp1251'"); После этого все данные будут приходить в установленной кодировке. Кодировку соединения можно менять: [sql]SET NAMES 'utf8';[/sql] В этом случае данные будут приходить в UTF-8, никак не затрагивая данные в таблице, которые могут храниться в другой кодировке. Следите за тем, чтобы весь остальной текст на странице тоже был в UTF-8. Вопросы? Замечания?
Предлагаешь мне погадать? В какой кодировке таблица, в какой кодировке страница? Юзер рутовый или нет?
Добавлю к сообщения Сергея: Сегодня была фигня, что русский текст показывался корректно (utf8 и в БД и на странице), но буквы "ш" и "И" показываются в виде квадратиков (в IE) и другими крякозябрами в других браузерах. Погуглив, решил проблему так: На БД и таблицы установил utf8_general_ci После коннекта к БД: [sql] mysql_query("SET NAMES 'utf8';"); mysql_query("SET CHARACTER SET 'utf8';"); mysql_query("SET SESSION collation_connection = 'utf8_general_ci';"); [/sql] И все нормально работает.
Стоит добавить, как поддержка кодировки уcтанавливается на MySQL под Windows Пример конфигурационного файла my.ini [client] port = 3306 #Конфигурационные параметры для сервера MySQL [mysqld] port = 3306 socket = /tmp/mysql.sock skip-locking key_buffer = 16K max_allowed_packet = 1M table_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K read_rnd_buffer_size = 256K net_buffer_length = 2K thread_stack = 64K # Установка кириллицы на сервере default-character-set=cp1251 #Указание кодировки character-sets-dir=g:/mysql/share/charsets #Указание пути к папке кодировок (скорректируйте для своего сервера!) server-id = 1 # Конфигурационные параметры для программы резервного копирования [mysqldump] quick max_allowed_packet = 16M # Установка кириллицы default-character-set=cp1251 #Указание кодировки character-sets-dir=g:/mysql/share/charsets #Указание пути к папке кодировок (скорректируйте для своего сервера!) # Конфигурационные параметры для программы-клиента mysql.exe [mysql] no-auto-rehash # Установка кириллицы default-character-set=cp1251 #Указание кодировки character-sets-dir=g:/mysql/share/charsets #Указание пути к папке кодировок (скорректируйте для своего сервера!) [isamchk] key_buffer = 8M sort_buffer_size = 8M [myisamchk] key_buffer = 8M sort_buffer_size = 8M [mysqlhotcopy] interactive-timeout
Всё пробовал не менятся кодировка С utf8_general_ci на cp1251_general_ci. Подскажите пошагово: что где надо прописать, какие команды и т.д. Надо чтобы везде было cp1251_general_ci вместо того что на картинке:
Возможно окончательная победа в войне с utf8 MySQL my.cnf или под виндой my.ini: [client] default-character-set= utf8 [mysql] default-character-set=utf8 [mysqld] default-character-set=utf8 В PHP-скрипте <?php /* create a connection object which is not connected */ $link = mysqli_init(); /* connect to server */ mysqli_real_connect($link, 'localhost', 'root', 'бла-бла-бла', 'бла'); /* check connection */ if (mysqli_connect_errno()) { printf("Ошибка соединения с БД : %s\n", mysqli_connect_error()); exit(); } /* Устанавливаем кодировку для корректного вывода в браузере */ $query = "SET NAMES 'utf8'"; if (mysqli_query($link,$query) === TRUE) { printf("Кодировка UTF8 успешно установлена.\n"); } else { printf("Ошибка выполнения запроса на установку кодировки UTF8 для вывода в браузере : %s\n", mysqli_error($link)); exit (); } /* Устанавливаем кодировку для корректного collation*/ $query = "SET SESSION collation_connection = 'utf8_general_ci';"); if (mysqli_query($link,$query) === TRUE) { printf("Collation UTF8 успешно установлен.\n"); } else { printf("Ошибка выполнения запроса на установку collation UTF8 : %s\n", mysqli_error($link)); exit (); } /* close connection */ mysqli_close($link); ?> Если используете библитеку mysql, соотвтственно подкорректировать вызываемые функции. !!!!! Сам PHP-скрипт должен быть в кодировке UTF8 !!!!! Скрипты MySQL должны быть в кодировке UTF8. Для танкистов: Если в notepad создать текстовый файл, набить какой нибудь код. Этот файл будет иметь кодировку cp1251. Если он будет содержать русские символы, то при попытке выполнить его из под mysql будете посланы на ERROR. Один из примитивных вариантов: в MySQL Query Browser создайте новый Script Tab. В него из Clipboard'а вставте ваш текст. Сохраните его как superpuper.SQL, сравните размер с исходным текстовым файлом. Этот скрипт будет нормально выполняться из под mysql при наличии в нем русских символов. Аналогично проверьте PHP-скрипт. !!!!! Вставка из clipboarda винды в командную строку mysql катит только если текст не содержит русских символов. Винда вставляет cp1251, и соответственноо mysql посылает на ERROR. Если все это выполнено, нигде никаких упоминаний про cp1251 не нужно. PS. Имейте в виду - размер VARCHAR при использовании utf8 не должен превышать 64К/3 = 21,33К
Не думал, что после того чего уже пережил - напишу сюда, но Винда, кодировки в базах - юникод, на страничках - utf8, то же и скрипты. Не пугайтесь, со страничками все хорошо, везде все по русски. Но, решил сегодня воспользоваться консолью мускуловской, не тут то было: ╨Э╨░╤З╨░╤В╨░ вот такие бяки. И сет намес ставил.. Мне кажется что просто сама консоль 1251 по этому и такие карявости. Я не прав? в любом случае, как это победить, или лучше не париться и юзать как раньше майадмин?
У меня программа, в которой я php-код редактирую, иногда возмёт да и сохранит файл в однобайтовой кодировке. Она это может делать автоматически, если все символы в документе принадлежат одной однобайтовой кодировке и нет ни одного символа из другой. Чтобы быть уверенным, вставляю в начало документа комментарий: #юертз ěščřž Т.е. набор из символов, которые могут быть одновременно только в многобайтовой кодировке. В notpade тоже можно сохранить в utf-8, если при сохранении в окне её выбрать.
Помогите мне пожалуйста.... :_( Пользуюсь консольным клиентом. Я создал БД:[sql]CREATE DATABASE admins DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci[/sql] Создал таблицу, внес в нее данные и между каждым действием писал[sql] set names c1251;[/sql] На самой странице написал: HTML: <meta http-equiv=Content-Type content="text/html; charset=windows-1251" /> И всеравно пишутся каракули *WALL*
вот скажите мне, ну, есть консоль, ну есть шелл-доступ, и что? Теперь только этим и пользоваться? А вот я ленивый и в консоль лезу только в случаях, когда это действительно надо. Люблю тыкать в кнопки и ссылки LokiFC set names c1251; достаточно 1 раз прописать. После соединения с бд. И вполене возможно, что данные твои пишутся нормально. Попробуй отсешь другие варианты. В какой кодировке сохранён сам файл? Сомневаюсь, что utf-8, но а вдруг? Потом, в апаче есть такая директива, как AddDefaultCharset. Отвечает за кодировку в которой по умолчанию будут отдаваться серваком файлы. И если стоит utf-8 или другая отличная от WINDOWS-1251, то чихал он на HTML: <meta http-equiv=Content-Type content="text/html; charset=windows-1251" /> . Лечится либу правкой конфига апача, либо отправкой перед выводом текста заголовка PHP: <? header('Content-Type: text/html; charset=CP1251'); ?> Вот будешь уверен, что таких косяков нет, можно будет гнать на БД и сочинять всякие извращённые способы заполнения.
2Luge, помогло Не думал, что проблема может заключатся в неправильном способе задачи кодировке странице... ...а это было так....
Доброго времени суток! Мужики, что я делаю не так? Ситуевина следующая: 1. База, таблица, записи в кодировке cp1251 2. Страница в кодировке cp1251 3. На странице даже вставлен mysql_query("SET NAMES 'cp1251'"); В итоге страница вылезает в кодировке cp1251(как и задумывалось), данные из мускуля на странице отображаются знаками вопроса(что нежелательно). (((
Может сервер высылает заголовок http в другой кодировке? Попробуйте header("Content-type: text/html; charset=windows-1251");
Ну я так понимаю, что изменив в апаче AddDefaultCharset UTF-8 на CP-1251, я вроде бы как сделал тоже самое. К сожалению проблема осталась (((. Есть ли смысл дефолтовой кодировкой мускуля сделать CP-1251? Сейчас в мускуле повсюду юникод - созданное мной как белая ворона в виндовой кодировке лежит.
Еще раз, здравствуйте! Продолжаю мучение: Выставил дефолтовую кодировку для mysql в cp1251 - результат от же (((( Может кто-нить подбросит совет? вот что имею: 1. Апаче раздает страницы с параметром AddDefaultCharset CP-1251 2. Мускуль в настройках my.cnf раздел [mysqld] (может тут беда?) имеет 2 параметра - collation_server = cp1251_general_ci - character_set_server = cp1251 3. База, таблицы в базе, записи в таблицах в в cp12-51_general_ci 4. Страница в windows-1251 5. Страница имеет mysql_query("SET NAMES 'cp1251'"); Со всем этим у меня трабла - все что вытягивается из мускуля - на странице превращается в знаки вопроса. УПД. Загугли решают )) Правильно поставленный поисковый вопрос - 80% сделано Добавил следующее после коннекта с базой - заработало PHP: <?php mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'"); ?> Спамибо ответившим.
Здраствуйте!!! При добавлении информации через блок администратора в базу данных mysql, в базе данных информация отображается иероглифами, но только когда печатаешь русскими буквами!!! При отправке формы английскими или цифрами приходит все нормально!!! Страница с которой происходит отправка имеет кодировку utf8!!! phpMyAdmin 2.6.1, MySQL 4.1.16, Appach 1.3.33 Php 5.1.2!!! Где и что нужно поменять, чтоб небыло этих иероглифов??? Как я понял идет именно несовместимость кодировок страница в utf8, а mysql 1251!!! А так все отображаеца нормально, проблема именно при поступлении данных в базу, приходят ИЕРОГЛИФЫ!!!