SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.08.2007 09:08:47

JuS
Участник
Зарегистрирован: 30.08.2007
Сообщений: 2

Проблема кодировки (вместо кириллицы ???)

Здравствуйте.

Я очень слабо разбираюсь в функциях MySql, поэтому прошу не судить строго возможно наивные вопросы.
Суть  в следующем. Вчера переехала на новый хостинг, где БД MySql 5.0.22
При переносе дампа раздела, связанного с БД возникла проблема корректного отображения кириллицы - вместо букв вопросы.
Дамп сделан в Денвере, в кодировке ср1251, при помощи phpmyadmin (другими программами-дамперами я не умею пользоваться). При переносе для всех таблиц был указан DEFAULT CHARSET=cp1251
На сервере сейчас и для самой базы, и во всех таблицах, и в текстовых полях стоит в колонке "Сравнение" кодировка  cp1251_ general_ci (стандарт windows-1251), поэтому в базе (в "Обзоре") все нормально - русский текст, но на сайте все равно одни ???  Пользователи жалуются, а я ничего не могу сделать... На других хостингах такой проблемы с этим же разделом и этим же дампом не было.

Что делать, можно ли это исправить и КАК, не обладая правами администрирования "root", т.е. не имея доступа к файлам настройки и управления MySql  ?

З.Ы. Нашла на вашем сайте статью на подобную тему http://sqlinfo.ru/articles/info/5.html , но не поняла, вкакой программе (или файле) делается вот это:

-------------------------------
5.0 > SET NAMES koi8r;
Query OK, 0 rows affected (0.00 sec)

5.0 > SET character_set_server=koi8r;
Query OK, 0 rows affected (0.00 sec)
-------------------------------

В дампе, который делает  phpmyadmin нет и близко знаков > и функций "Query "

Поясните, пожалуйста, можно ли как-то на уровне дампа phpmyadmin исправить ситуацию и добиться корректного вывода кириллицы? Или придется опять менять хостинг, т.к. тех.поддержка игнорирует мои вопросы на эту тему. sad(

Неактивен

 

#2 30.08.2007 10:30:31

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Проблема кодировки (вместо кириллицы ???)

1. Посмотрите дамп, действительно ли он читабелен в cp1251, например в notepad
2. В Ваших скриптах PHP после подключения к базе добавьте строчку mysql_query("SET NAMES cp1251");

Неактивен

 

#3 30.08.2007 10:36:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема кодировки (вместо кириллицы ???)

Здравствуйте!

Для того, чтобы все работало правильно, Вам нужно быть уверенной в кодировке
на каждом этапе. Этапы очень простые:

1. Кодировка файла дампа. Это можно посмотреть в любом текстовом редакторе,
открыв дамп в windows. Если у Вас там отображаются нормальные русские буквы,
то дамп в cp1251.

2. Кодировка таблиц на сервере. В дампе при создании таблиц должно быть указана
в строке создания таблицы CHARSET=cp1251 (тоже смотрится в редакторе).

3. Кодировка данных на сервере. В начале дампа должна быть строчка с текстом
SET NAMES cp1251. Это будет гарантировать, что при чтении дампа сервером,
сервер будет знать, что данные к нему поступают в cp1251. Опять-таки, в редакторе.

4. Кодировка при выборке данных. Это обычно и является причиной не работы многих
зарубежных программ, потому что они тестируются в latin1, и люди просто не знают
о проблеме. После подключения, Ваша программа (например, PHP) должна вызвать
команду SET NAMES cp1251 - тогда сервер начнет отдавать данные в кодировке
windows.

Phpmyadmin, насколько я понимаю, умеет эту команду выполнять, а вот в других
PHP-программах такую функциональность иногда приходится дописывать вручную.

P.S. По поводу примера из статьи: SET NAMES koi8r - это команда, все остальное -
это ответ сервера на эту команду. Запускать и смотреть можно в стандартном клиенте
mysql. На хостинге такой возможности выполнить команду как правило нет.

Неактивен

 

#4 30.08.2007 11:07:33

JuS
Участник
Зарегистрирован: 30.08.2007
Сообщений: 2

Re: Проблема кодировки (вместо кириллицы ???)

ОГРОМНОЕ СПАСИБО за помощь и пояснения!

После вставки mysql_query("SET NAMES cp1251"); в cоnfig.php часть таблиц стала отображаться на сайте корректно. Раньше в скрипте указание на русскую кодировку было только в языковом файле и этого хватало.

Некорректные таблицы удалила (вчера они были в самой базе в нормальной кодировке, сегодня почему-то при тех же настройках стравнения стали ???)  и сейчас перезалила еще раз, изменив в исходном дампе TYPE=MyISAM на ENGINE=MyISAM (дамп базы на сервере показал эту разницу). Сработало!

Неактивен

 

#5 30.08.2007 16:06:34

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Проблема кодировки (вместо кириллицы ???)

Хорошо, что все получилось.

Один комментарий: TYPE=MyISAM на ENGINE=MyISAM это синонимы в версиях MySQL до 5.0 включительно. MySQL, начиная с версии 5.1.8 показывает Warning на TYPE=MyISAM, в будущем планируется всегда использовать ENGINE.

Неактивен

 

#6 21.02.2008 11:23:25

Claus
Участник
Зарегистрирован: 12.01.2008
Сообщений: 4

Re: Проблема кодировки (вместо кириллицы ???)

Здравствуйте! У меня проблемма немного другая : есть хост с MySQL 5.0.24, есть некая база с таблицами которая была изначально koi8r, но потом в таблицы интегрировали данные в cp1251. И все бы было хорошо если бы не пропала буква "Ё" и еще несколько символов. Другими словами после интеграции, всем таблицам было присвоино CHARSET=cp1251; Но  данные в них оказались в koi8r и скрипт все отображает кроме буквы Ё, вернее он её отображает в виде знака ?- к примеру "?ршик".  Пытался решить проблемму следующим образом: Открывал дамп базы в штирлице, видел нечитаемый текст (набор символов в кирилице) жмакал декодировать, получал читаемые данные, заливал все на сервер...Ноооооо!!! Теперь скрипт выдавал нечитаемый текст в виде набота символов в кирилице. А при попытке добавить данные они продолжали добавляться в koi8r. Проделывал те же манипуляции на других серверах все работает нормально но там стоит MySQL 4..., Че делать уже не знаю, хостеры на просьбу реагируют в виде разведенных рук и нечего не беруться решать. Помоги те пжалуста!!!!!!!

Неактивен

 

#7 21.02.2008 14:37:22

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема кодировки (вместо кириллицы ???)

Собственно, мой ответ по поводу уверенности в кодировке на каждом этапе
подойдет и Вам smile

1 .Вы должны для себя определиться, в какой кодировке Вы все-таки хотите
хранить данные. Эта кодировка должна стоять в метаинформации таблиц
(например, CREATE TABLE name (...) CHARSET=utf8).

2. Вы должны определиться, в какой кодировке Вы ходите получать и заносить
данные. Обычно, Вы хотите, чтобы эта кодировка совпадала с кодировкой
статических страниц на Вашем сервере (т.е. если, например, страницы в cp1251,
то Вы хотите, чтобы сервер отдавал данные в cp1251). Для этого при подключении
нужно выполнить соответствующую команду (например, SET NAMES cp1251).
При  добавлении данных, сервер будет считать, что сами данные находятся в
этой же кодировке.

3. Видимо, Вам прийдется перезалить уже существующие данные, чтобы кодировки
не путались. Проще всего, сделать дамп, сконвертировать его в известную Вам кодировку
и залить на сервер, предварительно сообщив серверу, в какой же кодировке эти данные
находятся (тоже SET NAMES).

Неактивен

 

#8 29.02.2008 13:59:50

Claus
Участник
Зарегистрирован: 12.01.2008
Сообщений: 4

Re: Проблема кодировки (вместо кириллицы ???)

Извините за долгое молчание...болезнь в оффлайн загнала!!!  Воообщем сделал я дамп. перевел его в 1251, выполнил SET NAMES cp1251, залил дамп на сtрвер... поглядел в таблице на данные : все читаемо! запускаю скрипт а он ГАД отображает все в нечитаемой кириллице и продолжает записывать данные в Koi8r !!!!!!!!!!!!!!!!!!!!!!
вот так выглядит таблица :

CREATE TABLE `smf_boards` (
  `ID_BOARD` smallint(5) unsigned NOT NULL auto_increment,
  `ID_CAT` tinyint(4) unsigned NOT NULL default '0',
  `childLevel` tinyint(4) unsigned NOT NULL default '0',
  `ID_PARENT` smallint(5) unsigned NOT NULL default '0',
  `boardOrder` smallint(5) NOT NULL default '0',
  `ID_LAST_MSG` int(10) unsigned NOT NULL default '0',
  `ID_MSG_UPDATED` int(10) unsigned NOT NULL default '0',
  `memberGroups` varchar(255) NOT NULL default '-1,0',
  `name` tinytext NOT NULL,
  `description` text NOT NULL,
  `numTopics` mediumint(8) unsigned NOT NULL default '0',
  `numPosts` mediumint(8) unsigned NOT NULL default '0',
  `countPosts` tinyint(4) NOT NULL default '0',
  `ID_THEME` tinyint(4) unsigned NOT NULL default '0',
  `permission_mode` tinyint(4) unsigned NOT NULL default '0',
  `override_theme` tinyint(4) unsigned NOT NULL default '0',
  PRIMARY KEY  (`ID_BOARD`),
  UNIQUE KEY `categories` (`ID_CAT`,`ID_BOARD`),
  KEY `ID_PARENT` (`ID_PARENT`),
  KEY `ID_MSG_UPDATED` (`ID_MSG_UPDATED`),
  KEY `memberGroups` (`memberGroups`(48))
) ENGINE=MyISAM AUTO_INCREMENT=28 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=28 ;

Неактивен

 

#9 29.02.2008 14:02:43

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Проблема кодировки (вместо кириллицы ???)

В скрипт нужно добавить команду:
mysql_query("SET NAMES CP1251");
сразу после коннекта к базе

Неактивен

 

#10 29.02.2008 14:27:52

Claus
Участник
Зарегистрирован: 12.01.2008
Сообщений: 4

Re: Проблема кодировки (вместо кириллицы ???)

Ребят, сразу извините за неграмотность в php программировании!!! Но если я доблю mysql_query("SET NAMES CP1251"); в таком виде:

if (empty($db_persist))
    $db_connection = @mysql_connect($db_server, $db_user, $db_passwd);
else
    $db_connection = @mysql_pconnect($db_server, $db_user, $db_passwd);
mysql_query("SET NAMES CP1251");

Это будет правильно ?

Неактивен

 

#11 29.02.2008 14:34:01

Claus
Участник
Зарегистрирован: 12.01.2008
Сообщений: 4

Re: Проблема кодировки (вместо кириллицы ???)

Всем спасибо !!!!!!!!! Все работает!!!!!!!!!!!!!

Неактивен

 

#12 10.03.2009 11:52:15

bRUtality
Завсегдатай
Зарегистрирован: 20.07.2008
Сообщений: 32

Re: Проблема кодировки (вместо кириллицы ???)

Здравствуйте!

Помогите пожалуйста решить проблему кирилицы для MySQL 6.0. Я общаюсь с БД через программу на VS2008 + Connector/NET. При попытке ввести данные на русском языке БД отображает знаки вопроса. То же самое если вносить данные ручками через консоль.

Неактивен

 

#13 10.03.2009 16:16:14

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема кодировки (вместо кириллицы ???)

После подключения, выполните команду «SET NAMES cp1251».

Неактивен

 

#14 10.03.2009 21:42:41

Electric200
Участник
Зарегистрирован: 10.03.2009
Сообщений: 1

Re: Проблема кодировки (вместо кириллицы ???)

Здравствуйте .. Не хотел создавать новую тему, так как есть уже эта.. Почитал похожие темы, нечего не помогло..

Есть у меня база БД MySQL
Есть страница вывода запроса к БД на PHP
Решил сделать все под utf8

БД находится в UTF8, прописал в htaccess

CharsetDefault utf-8
CharsetSourceEnc utf-8
AddDefaultCharset utf-8

Страницу вывода изменил на UTF
В странице, результат запроса выводится в select (каскадный список). Так вот этот список в "???????".
Когда выбираю в браузере windows-1251 то все наоборот, список норма, страница в кровозябрах.
Выходит что данные почему то в windows-1251

Данные сервера

character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server cp1251
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

Создаю таблицу так

CREATE TABLE grh_country (
itemid_country           INT NOT NULL ,
name_country             varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Ввод данных делаю через майадмин

INSERT INTO grh_country (itemid_country,name_country)
VALUES
('01','Андорра'),
('02','Объединенные Арабские Эмираты'),
('03','Антигуа и Барбуда'),
('04','Ангилья'),
('05','Албания'),
('06','Армения'),
('07','Антильские Острова'),
('08','Ангола'),
('09','Антарктика'),
('10','Аргентина'),
('11','Американское Самоа'),
('12','Австрия');

Выборку делаю скриптом PHP
$name_count = mysql_query("select  * FROM grh_country ORDER BY name_country ");

Даже если делать так, тоже без толку
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8'");

«SET NAMES UTF8». - тоже не помогает...

Подскажите плиз, а то уже неделю лбом бьюсь ...

Заранее благодарен!!

Неактивен

 

#15 11.03.2009 12:08:26

bRUtality
Завсегдатай
Зарегистрирован: 20.07.2008
Сообщений: 32

Re: Проблема кодировки (вместо кириллицы ???)

paulus написал:

После подключения, выполните команду «SET NAMES cp1251».

Сделал. Теперь так: "Иванов" отображается как "??ано?", "Петорв" - как "????о?". Есть ли еще какие способы?

Неактивен

 

#16 24.07.2009 11:58:32

-=J@GU@R=-
Участник
Зарегистрирован: 24.07.2009
Сообщений: 2

Re: Проблема кодировки (вместо кириллицы ???)

Доброго времени суток! Вставил "DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin" в запрос создания БД - теперь не могу добавить в БД запись на русском... Без добавления всё работает, но в phpmyadmin отображаются иероглифы... Например вместо "Евгений" отображается "Åâãåíèé"... Подскажите пожалуйста как быть?

Отредактированно -=J@GU@R=- (24.07.2009 12:00:41)

Неактивен

 

#17 24.07.2009 20:33:02

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проблема кодировки (вместо кириллицы ???)

-=J@GU@R=- написал:

Вставил "DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin" в запрос создания БД

Эта запись лишь определяет какая кодировка и сопоставление будут использованы при создании новой таблицы, если вы их не укажите явно.

-=J@GU@R=- написал:

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

В чем это проявляется? Какая ошибка?

-=J@GU@R=- написал:

Без добавления всё работает, но в phpmyadmin отображаются иероглифы... Например вместо "Евгений" отображается "Åâãåíèé"...

Это не иероглифы smile Это cp-1251, прочитанный как cp-1252.

-=J@GU@R=- написал:

Подскажите пожалуйста как быть?

Внимательно прочитать начало этой темы, особенно сообщение №3.

Неактивен

 

#18 25.07.2009 14:38:25

Аня
Участник
Зарегистрирован: 24.07.2009
Сообщений: 3

Re: Проблема кодировки (вместо кириллицы ???)

Пример кодировки: Слово ФПМТ: ”ЏЊ’, слово фавт: д ўв, слово яяя: ппп. На что это похоже?

Неактивен

 

#19 25.07.2009 15:39:47

Аня
Участник
Зарегистрирован: 24.07.2009
Сообщений: 3

Re: Проблема кодировки (вместо кириллицы ???)

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

Неактивен

 

#20 27.07.2009 10:14:12

-=J@GU@R=-
Участник
Зарегистрирован: 24.07.2009
Сообщений: 2

Re: Проблема кодировки (вместо кириллицы ???)

vasya написал:

-=J@GU@R=- написал:

Вставил "DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin" в запрос создания БД

-=J@GU@R=- написал:

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

В чем это проявляется? Какая ошибка?

в браузере ничего не пишет... просто не добавляет(

Неактивен

 

#21 27.07.2009 20:36:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проблема кодировки (вместо кириллицы ???)

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

Неактивен

 

#22 06.08.2009 11:42:47

Lily
Участник
Зарегистрирован: 06.08.2009
Сообщений: 3

Re: Проблема кодировки (вместо кириллицы ???)

Здравствуйте!
Пытаюсь создать БД в версии MySQL 5. 0.37. При установке задала по умолчанию ср1251, в консоли кодировку поменяла на ср1251, в my.ini  прописала также, в итоге не могу данные вводить кирилицей ни вручную через клиента ни в редакторе  db Forge Studio for MySQL, помогите!

Неактивен

 

#23 06.08.2009 11:45:15

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Проблема кодировки (вместо кириллицы ???)

Клиент работает в виндоус в cp866 (точнее — терминал виндоус работает в cp866, и это не
переключается). У дбфорджстудио должна быть какая-то своя настройка (либо выкиньте
его на помойку и поставьте нормальный клиент, все современные клиенты MySQL должны
уметь переключать кодировку или по крайней мере уметь сообщать серверу о том, в какой
кодировке они работают).

Неактивен

 

#24 06.08.2009 12:04:25

Lily
Участник
Зарегистрирован: 06.08.2009
Сообщений: 3

Re: Проблема кодировки (вместо кириллицы ???)

Подскажите нормальный, буду благодарна

Неактивен

 

#25 06.08.2009 13:55:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Проблема кодировки (вместо кириллицы ???)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson