Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL + CGI perl проблема с русским 
V
    Опции темы
NikolaiZ
Дата 15.2.2006, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



Доброго времени суток....

Вот проблемка возникла, поставил я на Win2k, Perl + MySQL 5.
До этого я MySQL никогда сам не ставил... использовал хостинговые.

И наткнулся на проблему... Когда я добавляю запись в таблицу.... русские символы превращаются в ???? знаки вопросов.

Пробовал менять кодировку как самого сервака, так и БД, так и таблцы, и даже отдельного поля....

Но ничего не помогло....

-----------------

Позже мне помогли.... в мой тест скрипт добавить строчку.... $dbh->do('SET CHARACTER SET cp1251');

Код

#!/usr/bin/perl -w 

use strict; 
use DBI; 
use CGI; 

my $CGI = new CGI; 

my $dbh = DBI->connect("DBI:mysql:test:localhost","test","test", {RaiseError => 1, PrintError => 0}); 
   
$dbh->do('SET CHARACTER SET cp1251'); 

my $sth = $dbh->prepare("SELECT name FROM users"); 
   $sth->execute(); 

print $CGI->header(-charset=>'windows-1251'); 
     
while(my $text = $sth->fetchrow_array()) { 
print $text."<br>"; 
} 

$sth->finish(); 
$dbh->disconnect();


но мне ненравится в этом варианте что $dbh->do('SET CHARACTER SET cp1251'); приходится выполнять при каждом запуске скрипта, ведь на хостингах и без $dbh->do('SET CHARACTER SET cp1251'); все работает! А тут лишний запрос.....

У вас есть соображения что я мог не так сделать при установе MySQL или еще где... что без этого запроса я получаю не русский текст а знаки ???????

Сразу замечу что при установке MySQL основную кодировку я указал: cp1251
PM MAIL   Вверх
MaxPayne
Дата 16.2.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 9.8.2005

Репутация: нет
Всего: нет



Не вижу где ты вставку делаешь - тут ты просто выводишь из базы.

У меня была такая проблемс, я перед вставкой делаю так:

Код

$dbh = DBI->connect("DBI:mysql:user:localhost", "", "");
$dbh -> do("SET NAMES 'utf8'");
$dbh->do("INSERT INTO chat VALUES ('', '', '$p');");
$dbh->disconnect;


Это сообщение отредактировал(а) MaxPayne - 16.2.2006, 09:26
PM MAIL WWW ICQ   Вверх
BlackLFL
Дата 16.2.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 3
Всего: 12



Код

$dbh->do("SET character_set_client = cp1251"); 
$dbh->do("SET character_set_connection = cp1251"); 
$dbh->do("SET character_set_results = cp1251"); 

PM WWW   Вверх
NikolaiZ
Дата 16.2.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



MaxPayne,
У меня и при выводе тоже были эти знаки вопросов заместо русского языка....

Вопрос в другом, дословно:
- Почему на хостинге у меня не надо перед запросами указывать 'SET CHARACTER SET cp1251' а на локальной машине надо? Хотя и там и там MySQL5!

У моего локального сервака кодировка по умолчаню стоит cp1251, но русские символы всеравно не выходят без 'SET CHARACTER SET cp1251'
PM MAIL   Вверх
BlackLFL
Дата 16.2.2006, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 15.9.2005
Где: Москва

Репутация: 3
Всего: 12



NikolaiZ, я дал Вам решение проблемы, хочю добавить, что при работе с базами данных, хорошим тоном является, указание локали! Это способствует переносимости также!

Это сообщение отредактировал(а) BlackLFL - 16.2.2006, 14:01
PM WWW   Вверх
NikolaiZ
Дата 16.2.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 15.2.2006

Репутация: нет
Всего: нет



BlackLFL,
Конечно! большое спасибо, я и не отрицаю то вы помогли... просто мне был интересен сам принцип...
А вы правы... лучше явным образом указывать в какой кодировке мы будем общаться с сервером.....

Всем спасибо! Ваш форум оказался лучше тех где я задавал подобные вопросы!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.