Проблемы с кодировка cp1251 в varchar

MySQL, PostgreSQL, InterBaseSQL etc

Модераторы: Art.i, vasya

Проблемы с кодировка cp1251 в varchar

Сообщение olegx » Ср мар 12, 2014 10:04 am

Создал базу данных. Сделал SET NAMES 'cp1251' Залил в нее данные из дампа, сохраненного в кодировке cp1251.

В итоге получил в полях varchar вместо символов знаки вопросов, в то же время поля blob импортировались правильно.

В чем может быть проблема?
olegx
 
Сообщений: 9
Зарегистрирован: Сб мар 08, 2014 10:24 pm

Re: Проблемы с кодировка cp1251 в varchar

Сообщение pepper » Ср мар 12, 2014 10:32 am

Если дамп сделан в 1251 (читается как текстовый файл редактором) и импорт делали тоже в 1251, то остается только вероятность того, что вы подключаетесь к базе с другой кодировкой и потому кириллица не читается.
При подключении к базе через ssh тоже сделайте SET NAMES 'cp1251' и попробуйте прочесть данные.
Если подключаетесь через PhpMyAdmin, в нем можно выставить кодировку при входе.
pepper
Support team
 
Сообщений: 551
Зарегистрирован: Пн окт 07, 2013 4:06 am

Re: Проблемы с кодировка cp1251 в varchar

Сообщение olegx » Ср мар 12, 2014 2:51 pm

pepper писал(а):Если дамп сделан в 1251 (читается как текстовый файл редактором) и импорт делали тоже в 1251, то остается только вероятность того, что вы подключаетесь к базе с другой кодировкой и потому кириллица не читается.
При подключении к базе через ssh тоже сделайте SET NAMES 'cp1251' и попробуйте прочесть данные.
Если подключаетесь через PhpMyAdmin, в нем можно выставить кодировку при входе.


Сделал SET NAMES 'cp1251' везде, где только возможно (перед тем, как восстанавливать базу из дампа, в движке сайта) - ничего не изменилось.
Базу старую удалил и восстановил из дампа снова - ничего не изменилось.

Но что интересно: поля blob отлично отображаются в русской кодировке, а varchar - знаками вопроса.
При обращении к базе через ssh все русские символы (как blob, так и varchar) - квадраты.

Тут еще порекомендовали русифицировать консоль: apt-get install console-cyrillic - сделал, но не помогло, квадраты по прежнему на месте.
olegx
 
Сообщений: 9
Зарегистрирован: Сб мар 08, 2014 10:24 pm

Re: Проблемы с кодировка cp1251 в varchar

Сообщение olegx » Ср мар 12, 2014 3:15 pm

Провел еще эксперимент: перегнал дамп в utf8, соответствнно заменив CHARSET=cp1251; на CHARSET=utf8;

Удалил с сервера старую базу данных и восстановил из дампа новую в кодировке uft-8 предварительно указав set names utf8. Проблема осталась blob как и при cp1251 прекрасно отображается, а varchar по прежнему остались знаки вопроса.
olegx
 
Сообщений: 9
Зарегистрирован: Сб мар 08, 2014 10:24 pm

Re: Проблемы с кодировка cp1251 в varchar

Сообщение ls » Ср мар 12, 2014 4:50 pm

Если вы откроете дамп в текстовом редакторе, то кодировка 1251 нормально читается в нем? Укажите кодировку set names cp1251; перед тем как заливать дамп, как вариант, можно вписать эту команду в его первую строку
* FirstVDS в twitter в facebook и в вконтакте *
ls
Support team
 
Сообщений: 6405
Зарегистрирован: Чт мар 01, 2007 10:36 am
Откуда: FirstVDS

Re: Проблемы с кодировка cp1251 в varchar

Сообщение swg » Ср мар 12, 2014 6:34 pm

Через что делали дамп (команды, софт)? И как пытаетесь импортировать (pma, mysql в консоле)? Посмотрите (покажите) HEX русских букв в дампе.
Например, PhpMyAdmin делает дамп в utf8 независимо от кодировки таблиц: смотрите, даже когда все таблицы в cp1251, но файл экспорта в utf-8.
Код: выделить все
CREATE TABLE IF NOT EXISTS `data` (
...
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=334217 ;

И при импорте никаких смен кодировок на cp1251 делать нельзя.
swg
флудит форум
 
Сообщений: 2386
Зарегистрирован: Сб окт 07, 2006 9:09 am
Откуда: NNov

Re: Проблемы с кодировка cp1251 в varchar

Сообщение olegx » Ср мар 12, 2014 8:23 pm

ls писал(а):Если вы откроете дамп в текстовом редакторе, то кодировка 1251 нормально читается в нем? Укажите кодировку set names cp1251; перед тем как заливать дамп, как вариант, можно вписать эту команду в его первую строку


Да, конечно 1251 читается нормально. Ведь я ж писал, что поля с типом blob восстановились без проблем. Проблемы с полем varchar - они выводятся в виде знаков вопроса.

Вот одна из таблиц (взято из дампа), содержащая оба типа данных (blob и varchar):

DROP TABLE IF EXISTS `category_desc`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `category_desc` (
`category_id` int(10) unsigned NOT NULL DEFAULT '0',
`language_id` int(10) unsigned NOT NULL DEFAULT '0',
`category_title` varchar(32) NOT NULL DEFAULT '',
`category_text` blob
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
/*!40101 SET character_set_client = @saved_cs_client */;


Дамп базы делал через с-панель (сайт был на виртуальном хостинге). Восстанавливаю через mysql> source site_db.sql (предварительно закачав архив на сервер и распаковав).
olegx
 
Сообщений: 9
Зарегистрирован: Сб мар 08, 2014 10:24 pm

Re: Проблемы с кодировка cp1251 в varchar

Сообщение swg » Ср мар 12, 2014 8:47 pm

Blob - двоичные данные (ни о чем не свидетельствует).
в раздел mysql добавьте или замените default-character-set
Код: выделить все
[mysql]
default-character-set=utf8
потом перезапустите mysql.
swg
флудит форум
 
Сообщений: 2386
Зарегистрирован: Сб окт 07, 2006 9:09 am
Откуда: NNov

Re: Проблемы с кодировка cp1251 в varchar

Сообщение olegx » Ср мар 12, 2014 10:22 pm

pepper, ls, swg, большое спасибо вам всем, что поддержали меня в трудную минуту и попытались помочь!

Разобрался в чем была проблема!

Всё дело в том, что на сайте используется 2 базы данных!

В этом случае надо явно указывать, к какой из двух баз идет запрос (второй аргумент команды):

mysql_query( "SET NAMES cp1251", $db_name );
olegx
 
Сообщений: 9
Зарегистрирован: Сб мар 08, 2014 10:24 pm


Вернуться в Базы данных

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1