1 (изменено: vodvorezlaya, 2008-03-03 16:34:36)

Тема: Помогите настроить phpMyAdmin

Я уже в панике.
После прочтения 10 веток форума, таки не понял как заставить phpMaAdmin'а отображать в результате запросов русские буквы.

Есть сайт, и в кодировке Windows-1251 отображает всё.
Сайт и админка отлично работают.

Но при выполнении запросов из phpMyAdmin выводит примерно такое(например по select * from ss_categories;):
??????????
????? / ?????
??????? ?????

Что я только не делал, и настраивал phpMyAdmin, $cfg['DefaultCharset'] = 'windows-1251';
и md.ini и многое другое, причем ничего не менялось.

на домашней страничке phpMyAdmin пишет вот такое:
MySQL-кодировка:  UTF-8 Unicode (utf8), причём сколько я и что я не менял, оно там всегда таким оставалось.

Как заставить phpMyAdmin работать с cp1251?

Спасибо.

2

Re: Помогите настроить phpMyAdmin

vodvorezlaya
В какой кодировке таблица содержащая данные в кирилице?
Если не знаете, то сделайте ее дамп и покажите структуру.

Проблема не в phpMyAdmin, и настроить его не удастся, судя по всему данные из скрипта приходят в кодировке latin1.

Как я понял у вас есть доступ к конфигурационному файлу MySQL (my.ini). Уточните: это локальный сервер? Что за скрипт?
Проверьте также чтобы подключение скрипта шло не через пользователя root.

3 (изменено: vodvorezlaya, 2008-03-04 12:21:13)

Re: Помогите настроить phpMyAdmin

подключение идёт через root, но это только пока, и кажется на кодировки не влияет.

my.ini

[client]
port=3306

[mysql]
default-character-set=latin1

[mysqld]
port=3306
basedir="C:/Program Files/MySQL/MySQL Server 4.1/"
datadir="C:/Program Files/MySQL/MySQL Server 4.1/Data/"
default-character-set=latin1
default-storage-engine=INNODB



SHOW VARIABLES LIKE 'char%';

character_set_client     utf8
character_set_connection     latin1
character_set_database     cp1251
character_set_results     utf8
character_set_server     latin1
character_set_system     utf8
character_sets_dir     C:\Program Files\MySQL\MySQL Server 4.1\share\char...
[size=16]
локальный сервер, конкретно сейчас вопрос о shop-script, а вообще и joomla есть и другое.

причём joomla отлично отображается, и она тоже в кодировке 1251[/size]


вот огрызок дампа

-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------
-- Server version    4.1.16-nt


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;


--
-- Create schema db_shop
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_shop;
USE db_shop;

--
-- Table structure for table `db_shop`.`ss_categories`
--

DROP TABLE IF EXISTS `ss_categories`;
CREATE TABLE `ss_categories` (
  `categoryID` int(11) NOT NULL auto_increment,
  `name` varchar(255) character set latin1 default NULL,
  `parent` int(11) default NULL,
  `products_count` int(11) default NULL,
  `description` text character set latin1,
  `picture` varchar(30) character set latin1 default NULL,
  `products_count_admin` int(11) default NULL,
  PRIMARY KEY  (`categoryID`)
) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin;

4

Re: Помогите настроить phpMyAdmin

vodvorezlaya сказал:

character_set_connection     latin1

Проблема заключается в этом.

В my.ini необходимы изменения:
[mysql]
default-character-set=cp1251
[mysqld]
default-character-set=cp1251
init-connect="SET NAMES cp1251"

Эти изменения в конфигурации MySQL будут действовать глобально, поэтому при установке скрипта в utf8 могут начаться проблемы уже с ним.

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

Объясняю почему кирилица отображается на сайте, хотя в БД лежат крякозябы.
Кодировка соединения latin1, поэтому данные при записи, которые на самом деле находятся в cp1251, записываются именно в latin1 (кодировка таблиц имеет меньший приоритет, чем кодировка соединения; крякозябы - это символы из таблицы latin1 на месте которых в cp1251 находится кирилица). При выборке данных подключение опять-таки идет с кодировкой latin1, поэтому на сайте отображается кирилица (крякозябы выбираются как latin1 но отображаются на странице с кодировкой cp1251).

С крякозябами в БД у вас не будет корректно работать поиск и сортировка.

При подключении через root, запрос SET NAMES не работает. root - техническая учетная запись, предназначенная исключительно для администрирования сервера MySQL.

5 (изменено: vodvorezlaya, 2008-03-04 18:20:38)

Re: Помогите настроить phpMyAdmin

Hanut сказал:

Эти изменения в конфигурации MySQL будут действовать глобально, поэтому при установке скрипта в utf8 могут начаться проблемы уже с ним.

Верю, были, т.к. применял и это.

Hanut сказал:

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

[mysql]
default-character-set=cp1251
[mysqld]
default-character-set=cp1251
init-connect="SET NAMES cp1251"

Уже на сайте после переустановки вместо русских букв были ??????????????????????????????????????.

Hanut сказал:

Кодировка соединения latin1, поэтому данные при записи, которые на самом деле находятся в cp1251, записываются именно в latin1

Как я понял, они не перекодируются в latin1, а просто пишутся как latin1, и phpMyAdmin воспринимает их как latin1, а загурбулины отображаются потому что на самом деле это cp1251.
А при соединении они тоже передаются как latin1, только браузер понимает что это cp1251.

Но почему тогда у joomla при такой-же кодировке всё отображается отлично?

P.S. и ещё добавлю, вчера поставил на удалённый  хост тот же shop-script, где phpMyAdmin пишет MySQL-кодировка: Windows-1251, то русские символы в phpMyAdmin были знаками ?????????????????, а не ??????????? ????, как в моей базе.

6

Re: Помогите настроить phpMyAdmin

vodvorezlaya сказал:

Уже на сайте после переустановки вместо русских букв были ??????????????????????????????????????.

После установки скрипта по новой, без использования старых данных?

vodvorezlaya сказал:

Но почему тогда у joomla при такой-же кодировке всё отображается отлично?

Вероятно скрипт сам корректно устанавливает кодировку соединения, то есть при подключении используется запрос SET NAMES cp1251.

vodvorezlaya сказал:

P.S. и ещё добавлю, вчера поставил на удалённый  хост тот же shop-script, где phpMyAdmin пишет MySQL-кодировка: Windows-1251, то русские символы в phpMyAdmin были знаками ?????????????????, а не ??????????? ????, как в моей базе.

Ставили по чистой, с нуля? Кодировки таблиц везде cp1251?

7

Re: Помогите настроить phpMyAdmin

Hanut сказал:

После установки скрипта по новой, без использования старых данных?

да, установка с нуля занимает 5 мин smile

Hanut сказал:

Вероятно скрипт сам корректно устанавливает кодировку соединения, то есть при подключении используется запрос SET NAMES cp1251.

вы имеете ввиду shop-script? и рыть нужно в самих php файлах коннекта к базе?

8

Re: Помогите настроить phpMyAdmin

vodvorezlaya
Чтобы в БД вместо крякозябов вида ??????????? ????, писалась кирилица, необходима корректная установка кодировки соединения, которая осуществляется с помощью зароса SET NAMES cp1251.

К сожалению, больше мне нечего добавить.

Если у вас что-то не получается, то попробуйте посмотреть настройки элементов веб-сервера из данной статьи - Инструментарий веб-разработчика