Mysql windows кодировка 1251

Настройка MySQL

Установка всего программного обеспечения как MySQL, так и прочих пакетов (PHP, Phpmyadmin) была произведена на самом начальном этапе, — если помните, делали мы это командой: apt-get install apache2 php5 php5-mysql mysql-server phpmyadmin — см. подробнее->>>.

На какую процедуру пришлось убить больше всего времени при настройке MySQL, так это настройка кодировки. При извлечении информации из базы средствами PHP русские слова отображаются как вопросительные знаки — . Здесь существует проблема с кодировкой, так как загружаемая MySQL из репозитория Linux (Ubuntu 13.04) имеет кодировку UTF8 вперемешку с latin1, таким образом, любая из кодировок (cp1251 или utf8) при извлечении из MySQL будет отображаться коряво.

Если вам необходимо настроить кодировку cp1251, то первый способ, который легко отыскать в интернете и дающий решение данной проблемы – это просто в скрипт PHP, который у вас извлекает контент из базы, добавить вот такую строку:

mysql_query(«SET NAMES cp1251»);

Если не устраивает вариант, предусматривающий правку скритов, то необходимо править конфигурационный файл MySQL, в этой связи, прежде чем был найден ответ, была перепробована масса всяких вариантов, большинство из которых, вероятно, подходили для ранних версий Linux Ubuntu, но они не работают для UBUNTU 13.04.

default-character-set=cp1251 – не работает

Будем править конфигурационный файл my.cnf, который находится в каталоге /etc/mysql/my.cnf. Причем, если просто в my.cnf (путь — /etc/mysql/my.cnf ) [mysqld] заменить на такой вариант:
[mysqld]
default-character-set=cp1251

сохраняемся и перегружаемся:
service mysql restart

тогда при подключении к phpmyadmin мы получаем вот такую ошибку:
#2002 Невозможно подключиться к серверу MySQL

Взять за основу вышеописанный вариант и пробовать решить проблему по устранению возникающей ошибки, — скорее всего, такие действия не принесут положительного результата.

Рабочая конфигурация my.cnf MySQL

Выбираем другой алгоритм. Для начала входим в MySQL через phpmyadmin. На домашней странице в phpmyadmin видим заголовок «Основные настройки», в подразделе «Сопоставление кодировки соединения с MySQL» выбираем UTF8_UNICODE_ci.

Далее проверим конфигурацию MySQL. В phpmyadmin выберем вкладку SQL и пошлем туда запрос вида:
SHOW VARIABLES LIKE ‘char%’;
в ответ имеем:

Variable_name

Value character_set_client utf8 character_set_connection utf8

character_set_database

latin1 character_set_filesystem binary character_set_results utf8

character_set_server

latin1 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/

Видим в приведенной конфигурации в двух местах значения latin1, которые необходимо исправить в зависимости от того, какая кодировка вам нужна. Допустим, мы будем заменять на cp1251, поэтому в конфигурационном файле my.cnf, который находится в каталоге /etc/mysql/my.cnf, ищем модуль [mysqld] и меняем его на:

[mysqld]
skip-character-set-client-handshake
character_set_client=cp1251
character_set_server=cp1251

Делаем рестарт MySQL (перезагрузку необходимо делать всегда после внесения каких-либо изменений): service mysql restart

В phpmyadmin снова посылаем SQL — запрос вида:
SHOW VARIABLES LIKE ‘char%’;

Получаем ответ, исходя из которого видим, что наша конфигурация MySQL поменялась:

Variable_name

Value character_set_client utf8 character_set_connection utf8

character_set_database

cp1251 character_set_filesystem binary character_set_results utf8

character_set_server

cp1251 character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/

У нас latin1 поменялись на cp1251, соответственно сразу после приведения конфигурации MySQL к указанному виду, из базы у нас извлекается все корректно, наконец-то видим русские слова. Вот пример нашего текста, извлекаемого из БД MySQL.

От кодировки БД MySQL теперь переходим к настройкам кодировки сообщений, которые у нас с сайта отправляются на электронную почту, см. PHP отправка на e-mail >>>

Mysql windows кодировка 1251

у меня апач 2.58, php5, MySQL 4.1

и если возможно, обьясните как составить запрос к базе на изменение кодировок.

1.5 , sekrett ( ? ), 01:08, 01/06/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
Только этой строчки вполне достаточно, если на момент компиляции чарсет и колейшн были указаны правильно:
init-connect=»SET NAMES cp1251″
Для рута действительно не действует. Спасибо за статью, сыкономил время.
1.6 , Elias ( ? ), 16:33, 09/07/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
Попробовал Ваш метод — помогло.
у меня на php 4.4 все работало, а на 5 не захотело.
спасибо за статью.
1.7 , andrew ( ?? ), 10:10, 19/07/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
+1
Благодарю, работает.
1.8 , BezTain ( ? ), 00:46, 25/10/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
Спасибо большое! Слов нет, спас!
1.9 , Никита ( ?? ), 03:23, 29/11/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
Автору большое спасибо и респект!
1.10 , Gleb ( ? ), 15:28, 05/12/2007 [ответить] [﹢﹢﹢] [ · · · ] + / –
Автору и Geosan респект.
Совместив их указания заставил нормально понимать кириллицу Mysql 5.0
1.11 , lucky_777 ( ? ), 16:51, 22/01/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
+1 Огромный респект. Про прова ну это надо было додуматься.
1.12 , Иван ( ?? ), 17:25, 19/02/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
Также хорошая статья по этому поводу находится здесь, мне помогла именно она http://novikov.ua/articles/web-adaptation/6766/
1.13 , Netch ( ? ), 14:11, 03/03/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
Наступив на те же грабли, хочу отметить ещё одну особенность работы с кодировками. Обращайте внимание в какой кодировке находится ваш исходный РНР-код. I.e. если вы выбрали кодировку ср1251, тогда и файл сценария переведите в неё же: 1251 (ANSI — Cyrillic).

Благодарность авторам.

1.14 , usupov ( ? ), 16:40, 21/03/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
SET имя_переменнной= .
SET character_set_clien cp1251
SET character_set_connection cp1251
SET character_set_database cp1251
SET character_set_results cp1251
SET character_set_server cp1251
SET character_set_system utf8.
не понадобилось.
изменил php.ini, my.ini.
добавил юзер с огран. правами и все сработало.
Спасибо всем.. Батыр с Кыргызстана
1.15 , Egor ( ?? ), 15:10, 16/04/2008 [ответить] [﹢﹢﹢] [ · · · ] + / –
Мой рецепт:

1. Система на windows, mysql4.1 (default charset=utf8), php 5

2. Удостовериться что кодировка в dump’e действительно cp1251 (в моём случае было в UTF8, хотя все таблицы создавались с указанием cp1251, Т.е. был кривой dump. Перекодировал с помощью ultraedit32).

3. Сверху в dump’e прописать:

SET character_set_client = cp1251;
SET character_set_connection = cp1251;
SET character_set_database = cp1251;
SET character_set_results = cp1251;
SET character_set_server = cp1251;
SET collation_connection=’cp1251_general_ci’;
SET collation_server=’cp1251_general_ci’;

4. Создать таблицу:
create database table_name DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;

5. Импортировать данные

6. в PHP скриптах:
$r = mysql_connect($host,$user,$pass);
mysql_query(‘SET NAMES «cp1251″‘, $r);
mysql_query(«SET collation_connection=’cp1251_general_ci'», $r);
mysql_query(«SET collation_server=’cp1251_general_ci'», $r);
mysql_query(«SET character_set_client=’cp1251′», $r);
mysql_query(«SET character_set_connection=’cp1251′», $r);
mysql_query(«SET character_set_results=’cp1251′», $r);
mysql_query(«SET character_set_server=’cp1251′», $r);

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.

Помощь

Кодировки MySQL, русификация MySQL

MySQL кодировки

Проблемы с кодировками MySQL могут возникать для версий 4.1 и выше, поскольку для них введена возможность задания разной кодировки для разных уровней иерархии базы данных (сервер, база данных, таблица, столбец) и отдельно для соединения сервера с клиентом. По умолчанию MySQL имеет кодировку latin1 на всех уровнях.

Кодировка, в которой хранятся данные на сервере MySQL, должна совпадать с кодировкой самих данных. Например, для русских символов используется кодировка cp1251. Если в таблице будут храниться записи русскими буквами, то и кодировка этой таблицы должна быть задана cp1251, иначе отображаться будут не русские символы, а знаки вопроса или другие знаки.

При создании баз данных сразу указывайте кодировку для хранения символов, поскольку в случае отсутствия явно заданной кодировки будет использовано значение по умолчанию (latin1). Например, создавайте базу данных командой:

Кодировка соединения сервера с клиентом устанавливает, в каком виде будут передаваться данные между ними. Например, если в скрипте на сайте используются русские символы, то при обращении сайта к базе данных MySQL должен правильно распознать эти символы, чтобы корректно выполнить скрипт. Если кодировка соединения использует значение по умолчанию latin1, то русские символы сервер баз данных не сможет правильно распознать, следовательно, скрипт выполнится с ошибкой.

Установите нужную вам кодировку соединения сразу после подключения к серверу MySQL запросом:

Существует ряд клиентов, которые не могут установить нужную кодировку, имеют свою собственную. Для подобных случаев внесите в файл my.cnf в секцию [mysqld] строку:

В этом случае сервер выполнит команду «set names cp1251» сразу после соединения с клиентом и установит указанную в запросе кодировку.

Самые распространенные в России кодировки следующие:

Установка и использование на всех уровнях сервера баз данных одинаковой кодировки устраняет 90% проблем с кодировкой в MySQL.

Читайте также:  Autocad для mac os аналог
Оцените статью