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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> mysql + utf, mysql utf 
:(
    Опции темы
od0201
Дата 10.5.2011, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



всем доброе время суток.

открываю gmail, беру оттуда текст и вставляю в MySQL (поле utf8_general_ci), прогоняя текст через $dbh->quote()

и как не странно все работает.

Нооооооооооо...со временем заметил, что иногда не весь текст ложится корректно, а именно, когда в тексте присутствует умляут или что-то ему подобное (письма иностранцы пишут), весь текст начиная с этого символа пропадает.

вставка вручную прямо в таблицу нормально сохраняет этот же текст.
вывод текста в файл также корректен.

Прокомментируйте, пожалуйста, мой случай. Заранее благодарен

PM MAIL   Вверх
Pfailed
Дата 10.5.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А что-нибудь типа $dbh->query("set names utf-8") делаете?


--------------------
PM MAIL   Вверх
od0201
Дата 10.5.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



было

Код

use DBI;
$dbh = DBI->connect("dbi:mysql:database=$DATA{'DB'};host=$DATA{'HOST'};port=3306", $DATA{'LOGIN'}, $DATA{'PASSW'}) or die "Couldnot connect to MySQL: $DBI::errstr\n";
$dbh->do("set names utf8");
...
$dbh->do('UPDATE lm_in SET letter='.$dbh->quote($gm_letter) WHERE id='.$gm_id.' LIMIT 1');


попробовал убрать 
$dbh->do("set names utf8");
текст не пропадает, но русские буквы превратились в ????
поигрался немного и следующая комбинация привела к ожидаемому результату.

Код

use DBI;
$dbh = DBI->connect("dbi:mysql:database=$DATA{'DB'};host=$DATA{'HOST'};port=3306", $DATA{'LOGIN'}, $DATA{'PASSW'}) or die "Couldnot connect to MySQL: $DBI::errstr\n";
$dbh->do("set names utf8");
...
$dbh->do("set names CP1250");
$dbh->do('UPDATE lm_in SET letter='.$dbh->quote($gm_letter) WHERE id='.$gm_id.' LIMIT 1');
$dbh->do("set names utf8");


пока все работает, всем спасибо


Это сообщение отредактировал(а) od0201 - 10.5.2011, 14:07
PM MAIL   Вверх
od0201
Дата 10.5.2011, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



НЕТ !!! потестил, вариант с
$dbh->do("set names CP1250");
не устраивает
русские буквы выводит как 
Ďđč˙ňíîăî ňĺáĺ äí˙. 

$dbh->do("set names CP1251");
умляуды коверкает

$dbh->do("set names utf8");
все что не из латинского алфавита и все что идет после этого символа - удаляет


пока остановился на таком варианте (когда текст пропадает), ищу выход, если есть идее, прокомментируйте 

Код

CREATE TABLE IF NOT EXISTS `lm_in` (
...
  `id` int(7) NOT NULL,
  `letter` text CHARACTER SET utf8 NOT NULL,
...
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



Код

use utf8;
use DBI;
$dbh = DBI->connect("dbi:mysql:database=$DATA{'DB'};host=$DATA{'HOST'};port=3306", $DATA{'LOGIN'}, $DATA{'PASSW'}) or die "Couldnot connect to MySQL: $DBI::errstr\n";
$dbh->do("set character set utf8");
$dbh->do("set names utf8");
...
$dbh->do('UPDATE lm_in SET letter='.$dbh->quote($gm_letter) .' WHERE id='.$gm_id.' LIMIT 1');


Это сообщение отредактировал(а) od0201 - 11.5.2011, 08:19
PM MAIL   Вверх
arto
Дата 10.5.2011, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

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



perldoc DBD::mysql на предмет mysql_enable_utf8
PM MAIL ICQ   Вверх
od0201
Дата 10.5.2011, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



$dbh->{'mysql_enable_utf8'} = 1;

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


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

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


 




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


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

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