Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Я очень слабо разбираюсь в функциях 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 исправить ситуацию и добиться корректного вывода кириллицы? Или придется опять менять хостинг, т.к. тех.поддержка игнорирует мои вопросы на эту тему. (
Неактивен
1. Посмотрите дамп, действительно ли он читабелен в cp1251, например в notepad
2. В Ваших скриптах PHP после подключения к базе добавьте строчку mysql_query("SET NAMES cp1251");
Неактивен
Здравствуйте!
Для того, чтобы все работало правильно, Вам нужно быть уверенной в кодировке
на каждом этапе. Этапы очень простые:
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. На хостинге такой возможности выполнить команду как правило нет.
Неактивен
ОГРОМНОЕ СПАСИБО за помощь и пояснения!
После вставки mysql_query("SET NAMES cp1251"); в cоnfig.php часть таблиц стала отображаться на сайте корректно. Раньше в скрипте указание на русскую кодировку было только в языковом файле и этого хватало.
Некорректные таблицы удалила (вчера они были в самой базе в нормальной кодировке, сегодня почему-то при тех же настройках стравнения стали ???) и сейчас перезалила еще раз, изменив в исходном дампе TYPE=MyISAM на ENGINE=MyISAM (дамп базы на сервере показал эту разницу). Сработало!
Неактивен
Хорошо, что все получилось.
Один комментарий: TYPE=MyISAM на ENGINE=MyISAM это синонимы в версиях MySQL до 5.0 включительно. MySQL, начиная с версии 5.1.8 показывает Warning на TYPE=MyISAM, в будущем планируется всегда использовать ENGINE.
Неактивен
Здравствуйте! У меня проблемма немного другая : есть хост с MySQL 5.0.24, есть некая база с таблицами которая была изначально koi8r, но потом в таблицы интегрировали данные в cp1251. И все бы было хорошо если бы не пропала буква "Ё" и еще несколько символов. Другими словами после интеграции, всем таблицам было присвоино CHARSET=cp1251; Но данные в них оказались в koi8r и скрипт все отображает кроме буквы Ё, вернее он её отображает в виде знака ?- к примеру "?ршик". Пытался решить проблемму следующим образом: Открывал дамп базы в штирлице, видел нечитаемый текст (набор символов в кирилице) жмакал декодировать, получал читаемые данные, заливал все на сервер...Ноооооо!!! Теперь скрипт выдавал нечитаемый текст в виде набота символов в кирилице. А при попытке добавить данные они продолжали добавляться в koi8r. Проделывал те же манипуляции на других серверах все работает нормально но там стоит MySQL 4..., Че делать уже не знаю, хостеры на просьбу реагируют в виде разведенных рук и нечего не беруться решать. Помоги те пжалуста!!!!!!!
Неактивен
Собственно, мой ответ по поводу уверенности в кодировке на каждом этапе
подойдет и Вам
1 .Вы должны для себя определиться, в какой кодировке Вы все-таки хотите
хранить данные. Эта кодировка должна стоять в метаинформации таблиц
(например, CREATE TABLE name (...) CHARSET=utf8).
2. Вы должны определиться, в какой кодировке Вы ходите получать и заносить
данные. Обычно, Вы хотите, чтобы эта кодировка совпадала с кодировкой
статических страниц на Вашем сервере (т.е. если, например, страницы в cp1251,
то Вы хотите, чтобы сервер отдавал данные в cp1251). Для этого при подключении
нужно выполнить соответствующую команду (например, SET NAMES cp1251).
При добавлении данных, сервер будет считать, что сами данные находятся в
этой же кодировке.
3. Видимо, Вам прийдется перезалить уже существующие данные, чтобы кодировки
не путались. Проще всего, сделать дамп, сконвертировать его в известную Вам кодировку
и залить на сервер, предварительно сообщив серверу, в какой же кодировке эти данные
находятся (тоже SET NAMES).
Неактивен
Извините за долгое молчание...болезнь в оффлайн загнала!!! Воообщем сделал я дамп. перевел его в 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 ;
Неактивен
В скрипт нужно добавить команду:
mysql_query("SET NAMES CP1251");
сразу после коннекта к базе
Неактивен
Ребят, сразу извините за неграмотность в 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");
Это будет правильно ?
Неактивен
Всем спасибо !!!!!!!!! Все работает!!!!!!!!!!!!!
Неактивен
Здравствуйте!
Помогите пожалуйста решить проблему кирилицы для MySQL 6.0. Я общаюсь с БД через программу на VS2008 + Connector/NET. При попытке ввести данные на русском языке БД отображает знаки вопроса. То же самое если вносить данные ручками через консоль.
Неактивен
После подключения, выполните команду «SET NAMES cp1251».
Неактивен
Здравствуйте .. Не хотел создавать новую тему, так как есть уже эта.. Почитал похожие темы, нечего не помогло..
Есть у меня база БД 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». - тоже не помогает...
Подскажите плиз, а то уже неделю лбом бьюсь ...
Заранее благодарен!!
Неактивен
paulus написал:
После подключения, выполните команду «SET NAMES cp1251».
Сделал. Теперь так: "Иванов" отображается как "??ано?", "Петорв" - как "????о?". Есть ли еще какие способы?
Неактивен
Доброго времени суток! Вставил "DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin" в запрос создания БД - теперь не могу добавить в БД запись на русском... Без добавления всё работает, но в phpmyadmin отображаются иероглифы... Например вместо "Евгений" отображается "Åâãåíèé"... Подскажите пожалуйста как быть?
Отредактированно -=J@GU@R=- (24.07.2009 12:00:41)
Неактивен
-=J@GU@R=- написал:
Вставил "DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin" в запрос создания БД
Эта запись лишь определяет какая кодировка и сопоставление будут использованы при создании новой таблицы, если вы их не укажите явно.
-=J@GU@R=- написал:
теперь не могу добавить в БД запись на русском...
В чем это проявляется? Какая ошибка?
-=J@GU@R=- написал:
Без добавления всё работает, но в phpmyadmin отображаются иероглифы... Например вместо "Евгений" отображается "Åâãåíèé"...
Это не иероглифы Это cp-1251, прочитанный как cp-1252.
-=J@GU@R=- написал:
Подскажите пожалуйста как быть?
Внимательно прочитать начало этой темы, особенно сообщение №3.
Неактивен
Пример кодировки: Слово ФПМТ: ”ЏЊ’, слово фавт: д ўв, слово яяя: ппп. На что это похоже?
Неактивен
Вопрос снят. Просто я протупила то что я данные забивала из командной строки, а эта хрень работает на cp866
Неактивен
vasya написал:
-=J@GU@R=- написал:
Вставил "DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin" в запрос создания БД
-=J@GU@R=- написал:
теперь не могу добавить в БД запись на русском...
В чем это проявляется? Какая ошибка?
в браузере ничего не пишет... просто не добавляет(
Неактивен
Подключитесь к базе через консольный клиент или хотя бы phpadmin и добавте запись на русском языке. Какую ошибку он выдаст?
Неактивен
Здравствуйте!
Пытаюсь создать БД в версии MySQL 5. 0.37. При установке задала по умолчанию ср1251, в консоли кодировку поменяла на ср1251, в my.ini прописала также, в итоге не могу данные вводить кирилицей ни вручную через клиента ни в редакторе db Forge Studio for MySQL, помогите!
Неактивен
Клиент работает в виндоус в cp866 (точнее — терминал виндоус работает в cp866, и это не
переключается). У дбфорджстудио должна быть какая-то своя настройка (либо выкиньте
его на помойку и поставьте нормальный клиент, все современные клиенты MySQL должны
уметь переключать кодировку или по крайней мере уметь сообщать серверу о том, в какой
кодировке они работают).
Неактивен
Подскажите нормальный, буду благодарна
Неактивен
MySQL GUI Tools
http://dev.mysql.com/downloads/gui-tools/5.0.html
Неактивен