Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

Кодировка: PHP MySQL   Найти похожие ветки 

 
homm ©   (2007-04-18 09:34) [0]

Сразу попрошу не ругатся всякими RTFM и STFW :)
Нужно что-бы сервер и скрипты общались в кодировке ср1251. В конфигах сикьюэля прописано «default-character-set=cp1251», как надо. И по умолчанию действительно коннектится в нужной кодировке. Но проблема в том что PHP при коннекте где-то сам меняет кодировку. Т.е. запрос «SHOW VARIABLES LIKE "character_set_client"» сразу после коннект выдает кодировку latin1. Выхода я нашел два, но они оба меня не устраивают:

1) Делать запрос «SET NAMES cp1251» Каждый раз при коннекте
Каждый скрипт править не будешь же. К тому-же там цмска, правка исходного кода которой вроде как запрещена лицензией.

2) Прописать в конфигах «skip-character-set-client-handshake» и тогда сикьюэль забивает на требования клиента сменить кодировку.
Но вдруг все-же найдутся скрипты, для которых смена клиентской кодировки принципиальна.

Скорее всего нужно где-то в конфигах PHP прописать (или вообще убрать, пусть будет по умолчанию, верная) кодировку, в которой он пытается подключится. В денвере нет таких проблем, я пытался искать в нем по всем конфигам, где может быть это дело прописано, ничего не нашел.


 
Александр Иванов ©   (2007-04-18 09:45) [1]

По-моему, все настоятельно советуют именно 1.


 
PEAKTOP ©   (2007-04-18 09:57) [2]

php.ini в каталоге /etc или в каталоге c:\windows\

параметр
default_charset = "windows-1251"


 
homm ©   (2007-04-18 10:10) [3]


> параметр
> default_charset = "windows-1251"

Спасибо, но увы, не помогло. Видимо к базам данных эта строка не имеет отношения.


 
McSimm_ ©   (2007-04-18 10:16) [4]

Может сама cms делает set names ?


 
homm ©   (2007-04-18 10:18) [5]

> Может сама cms делает set names ?

Нет, я же на тестовом примере делаю запрос «SHOW VARIABLES LIKE "character_set_client"». Он показывает ср1251 только с включеной опцией «skip-character-set-client-handshake».


 
McSimm_ ©   (2007-04-18 10:27) [6]


> на тестовом примере

Коннект для тестового примера делает cms ?


 
McSimm_ ©   (2007-04-18 10:28) [7]


> запрос «SHOW VARIABLES LIKE "character_set_client"» сразу
> после коннект выдает кодировку latin1



> делаю запрос «SHOW VARIABLES LIKE "character_set_client"».
>  Он показывает ср1251


 
homm ©   (2007-04-18 10:42) [8]

> [7] McSimm_ ©   (18.04.07 10:28)
> > делаю запрос «SHOW VARIABLES LIKE "character_set_client"».
> >  Он показывает ср1251

Ну а дальше читать? :)


> Коннект для тестового примера делает cms ?

Конечно нет.
<?php
mysql_connect("localhost", "root", "");
$r = mysql_query("SHOW VARIABLES LIKE "character_set_client"");
var_dump(mysql_fetch_array($r));
?>


 
Алхимик ©   (2007-04-18 11:14) [9]


> 1) Делать запрос «SET NAMES cp1251» Каждый раз при коннекте
>
> Каждый скрипт править не будешь же.

Попробуй:
http://php-myadmin.ru/learning/mysql-cir.html
1) Оставить запрос "SET NAMES кодировка" в начале скрипта. Если скриптов много – см. вариант 2.
2) Заставить MySQL автоматически выполнять этот запрос при каждом соединении с ним.
Для этого необходимо в конфигурационном файле MySQL, в секции [mysqld] добавить следующую строку: init-connect="SET NAMES кодировка".


 
homm ©   (2007-04-18 11:16) [10]

> [9] Алхимик ©   (18.04.07 11:14)

Это я тоже читал. :) Не кошерно. Проблема то проще, где у PHP кодировка указывается с котрой он коннектится к MySQL по умолчанию. Все оставльное — костыли.


 
Алхимик ©   (2007-04-18 11:44) [11]

> [10] homm ©   (18.04.07 11:16)

А что говорят на форуме по твоей "секретной" CMS? :)


 
homm ©   (2007-04-18 11:49) [12]

:) Во первых не CMS не секретная (NetCat), во вторых она совершенно непричем, не понятно почему на ее форуме должны что-то говорить по этому поводу.


 
Алхимик ©   (2007-04-18 12:05) [13]

Версии php и My SQL какие?
У меня
php - 5.1.4
MySQL - 5.0
Для решения проблем с кодировками использую только SET NAMES cp1251, конфиги не правил.


 
McSimm_ ©   (2007-04-18 12:10) [14]


> > Коннект для тестового примера делает cms ?
> Конечно нет.


тогда почему нет:

> Может сама cms делает set names ?



> где у PHP кодировка указывается с котрой он коннектится
> к MySQL по умолчанию

нет такой настройки.


 
homm ©   (2007-04-18 12:23) [15]

> нет такой настройки.

А ведб правда, похоже не в PHP дело. Подключился через mysql.exe, сделал «SHOW VARIABLES LIKE "character_set_client"» и получил ltin1 ! Вообще не понимаю тогда логики. ВЕЗЕДЕ ГДЕ МОЖНО указал для mysql что работать по ср1251, а она все равно в кодировки по умалчанию коннектится :( Ладно, буду юзать «skip-character-set-client-handshake»...


 
McSimm_ ©   (2007-04-18 12:30) [16]


> В конфигах сикьюэля прописано «default-character-set=cp1251»

Может не в той секции ?
Может демон рестартовать надо после изменения?


 
homm ©   (2007-04-18 12:33) [17]

> Может не в той секции ?

В секциях client и mysqld.


> Может демон рестартовать надо после изменения?

Надо. Рестартовал естестввено :)


 
McSimm_ ©   (2007-04-18 12:41) [18]

[mysql]
default-character-set=cp1251


 
Real ©   (2007-04-22 02:53) [19]


> 1) Делать запрос «SET NAMES cp1251» Каждый раз при коннекте
> Каждый скрипт править не будешь же. К тому-же там цмска,
>  правка исходного кода которой вроде как запрещена лицензией.

А зачем каждый скрипт? У тебя как подключается скрипт к БД? Наверняка через один файл или функцию, в которой вызывается mysql_connect вот в него и добавь выполнение этого запроса. Насколько я знаю - все именно так и делают. Думаю за такую правку конфиг-модуля никто на тебя в суд не подаст :) К тому же, если кто-то увидит содержимое твоего файл с вызовом mysql_connect - то вероятно уже скоро БД будет снесена :)



Страницы: 1 вся ветка

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.056 c
6-1162996359
iXT
2006-11-08 17:32
2007.05.20
E-Mail Indi 10 (BDS 4) TIdMessage DateTime format


15-1177350860
ProgRAMmer Dimonych
2007-04-23 21:54
2007.05.20
Поясните, пожалуйста, такую вещь


15-1176982455
Real
2007-04-19 15:34
2007.05.20
Кодировка...


2-1177931656
allucard
2007-04-30 15:14
2007.05.20
Функция PaintTo - как убрать рамку?


11-1157385452
RedLine
2006-09-04 19:57
2007.05.20
Поддержка тем XP