Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: ???????? ?????? ?????
 
 автор: Barsuta   (30.04.2007 в 02:08)   письмо автору
 
 

Здравствуйте!
Целый день мучаюсь с одной проблемой. Создала дамп базы данных phpMyAdmin'ом и переносила ее на другой хост тоже phpMyAdmin'ом. В дампе русские буквы сохранены нормально. А при закачке на новый хост при отображении вместо русских букв из базы - знаки вопроса.

Подробнее:

Исходный хост:
phpMyAdmin 2.6.0-pl2
MySQL 4.1.14-log
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: cp1251_general_ci

Новый хост:
phpMyAdmin - 2.9.0.2
Версия MySQL-клиента: 4.1.20
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: cp1251_general_ci
Во вкладке Операции--->Сравнение: cp1251_general_ci (по умолчанию стояло latin1_swedish_ci

При импорте файла указывала значения:

Кодировка файла - пробовала два варианта utf8 и cp1251

Частичный импорт (Не знаю ставить эту галочку или не надо?) - Allow interrupt of import in case script detects it is close to time limit. This might be good way to import large files, however it can break transactions. Number of records(queries) to skip from start

Формат импортируемого файла SQL, Параметры SQL, SQL compatibility mode - none, ansi, db2, maxdb, mysql323, mysql40, mssql, oracle, postgresql - ??? Не знаю какой ставить, выбирала NONE

Написала письмо хостерам - ни ответа, ни привета. Помогите, пожалуйста.

Прикрепила дамп базы.

   
 
 автор: mr Bin   (30.04.2007 в 02:37)   письмо автору
 
   для: Barsuta   (30.04.2007 в 02:08)
 

Как офф-топ:
измените значения паролей в таблице user... а то всё как на блюдечке..

   
 
 автор: cheops   (30.04.2007 в 13:08)   письмо автору
 
   для: Barsuta   (30.04.2007 в 02:08)
 

Добавьте в начало дамп строку
SET NAMES cp1251;

   
 
 автор: Barsuta   (30.04.2007 в 16:16)   письмо автору
 
   для: cheops   (30.04.2007 в 13:08)
 

Пробовала, бесполезно.

???‚?µ??????

А вообще правильные данные я указываю при импорте файла ?

MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: cp1251_general_ci
Во вкладке Операции--->Сравнение: cp1251_general_ci

Хостеры ответили, что мне необходимо создавать дамп и заливать через shell. Для меня это темный лес. Я всегда пользовалась phpmyadmin.

Что делать - не знаю!

   
 
 автор: Trianon   (30.04.2007 в 19:33)   письмо автору
 
   для: Barsuta   (30.04.2007 в 02:08)
 

А какая версия сервера на новом хостинге?

И нет ли возможности экспортировать дамп со старого более свежим phpMyAdmin?

   
 
 автор: Barsuta   (30.04.2007 в 20:41)   письмо автору
 
   для: Trianon   (30.04.2007 в 19:33)
 

Версия сервера: 4.1.22

   
 
 автор: Barsuta   (01.05.2007 в 13:13)   письмо автору
 
   для: Barsuta   (30.04.2007 в 20:41)
 

Спасибо за внимание. Хостеры решили эту проблему. Тема закрыта.

   
 
 автор: Barsuta   (05.05.2007 в 00:05)   письмо автору
 
   для: Barsuta   (01.05.2007 в 13:13)
 

Рановато я тему-то закрыла. Проблему якобы решила, добавив в файл запроса к базе строку
mysql_query("SET NAMES 'cp1251'");

Но я только что заметила, что не работает сортировка по алфавиту. В чем может быть проблема?

   
 
 автор: cheops   (05.05.2007 в 01:24)   письмо автору
 
   для: Barsuta   (05.05.2007 в 00:05)
 

Сортируете при помощи конструкции ORDER BY? Какую кодировку по умолчанию имеет таблица?

   
 
 автор: Barsuta   (05.05.2007 в 10:08)   письмо автору
 
   для: cheops   (05.05.2007 в 01:24)
 

Знать бы еще, где это смотреть.... Давайте, я объясню ситуацию.

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

Возможно, сейчас в новых версиях изменились стандарты и необходимо прописывать какие-либо дополнительные запросы к базе или еще что-то.

MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: cp1251_general_ci (что стояло по умолчанию - уже не помню)
Во вкладке Операции--->Сравнение: cp1251_general_ci (по умолчанию стояло latin1_swedish_ci

Вот код файла подключения к базе:


<?
//подключение к базе данных
function db_connect()
{
$hosh="localhost";
$login="login";
$pass="password";
$name_baze="name";

   
$result = @mysql_pconnect("$hosh""$login""$pass"); 
   if (!
$result)
      return 
false;
   if (!@
mysql_select_db("$name_baze"))
      return 
false;
   
mysql_query("SET NAMES 'cp1251'");
   return 
$result;

}

function 
db_result_to_array($result)
{
   
$res_array = array();
   for (
$count=0$row = @mysql_fetch_array($result); $count++)
     
$res_array[$count] = $row;
   return 
$res_array;
}
?>

   
 
 автор: cheops   (05.05.2007 в 13:57)   письмо автору
 
   для: Barsuta   (05.05.2007 в 10:08)
 

А на странице, где неправильная сортировка имеются какие-нибудь SQL-запросы? Поищите там SQL-запрос, который начинается с ключеового слова SELECT?

   
 
 автор: Barsuta   (05.05.2007 в 14:04)   письмо автору
 
   для: cheops   (05.05.2007 в 13:57)
 

<?
...
// формируем запрос к базе
$conn db_connect();
if (!
$order)
{
$order=name;
}
$goods_result mysql_query("SELECT * FROM tov where grid='$grid' and categname=''  order by '$order'"get_limit($page$amount$in_page));

$count get_count_limit($page$amount$in_page);
while (
$row mysql_fetch_array($goods_result))
 {
   ...
 }
 ...

[поправлено модератором: объёмные листинги, лучше прикреплят в виде файла]

   
 
 автор: Trianon   (06.05.2007 в 01:08)   письмо автору
 
   для: Barsuta   (05.05.2007 в 14:04)
 

Покажите пожалуйста структуру таблицы tov
Структуру можно получить в разделе экспорт программы phpMyAdmin - фактически интересует текст оператора
CREATE TABLE ... tov (
....
) ....

   
 
 автор: Barsuta   (06.05.2007 в 11:07)   письмо автору
 
   для: Trianon   (06.05.2007 в 01:08)
 


CREATE TABLE `tov` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `grid` int(10) default NULL,
  `idtov` varchar(255) default NULL,
  `name` longtext,
  `cenad1` float default NULL,
  `cenad2` float default NULL,
  `cenad3` float default NULL,
  `cenad4` float default NULL,
  `catid` int(10) default NULL,
  `categid` int(10) default NULL,
  `categid2` int(11) default NULL,
  `tv1` longtext,
  `tv2` longtext,
  `categname` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=8664 ;

   
 
 автор: Trianon   (06.05.2007 в 15:45)   письмо автору
 
   для: Barsuta   (06.05.2007 в 11:07)
 

Попробуйте выполнить следующий оператор:

ALTER DATABASE `НазваниеВашейБазыДанных` DEFAULT CHARACTER SET cp1251 COLLATE cp1256_general_ci 

Выполнить его можно из PMA-раздела "Операции" указав внизу сравнение cp1251_general_ci

Если у Вас нет привилегий на такую операцию, придется попросить хостера выполнить её .

   
 
 автор: Unkind   (06.05.2007 в 01:17)   письмо автору
 
   для: Barsuta   (05.05.2007 в 14:04)
 

У Вас текст в UTF-8. Вам не cp1251 нужно, а utf8_general_ci:


<?php
mysql_unbuffered_query
("SET `character_set_client` = 'utf8';"); 
mysql_unbuffered_query("SET `character_set_results` = 'utf8';");  
mysql_unbuffered_query("SET `collation_connection` = 'utf8_general_ci';");
?>

   
 
 автор: Trianon   (06.05.2007 в 01:27)   письмо автору
 
   для: Unkind   (06.05.2007 в 01:17)
 

Вообще-то если дамп в utf-8 - это еще не значит, что текст в таблицах в utf-8.
Характеристики таблиц первого дампа явно показывали, что текст в cp1251.

   
 
 автор: Unkind   (06.05.2007 в 01:29)   письмо автору
 
   для: Trianon   (06.05.2007 в 01:27)
 

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

   
 
 автор: Trianon   (06.05.2007 в 15:39)   письмо автору
 
   для: Unkind   (06.05.2007 в 01:29)
 

Если характеристика таблицы не соответствует фактическому содержитмому полей, это значит, что содержимое БД искажено. При внесении данных или в процессе импорта - вопрос другой. Искаженное содержимое обычно сразу видно в клиенте администратора.
А здесь же, насколько я понимаю проблема в том, как правильно работать с корректной БД.

   
 
 автор: Barsuta   (07.05.2007 в 12:29)   письмо автору
 
   для: Trianon   (06.05.2007 в 15:39)
 

Вот, что мне сегодня ответила агава:

Сервер функционирует нормально, возможно в ваших скриптах есть некоторая несовместимость с данной версией MySQL. В этом случае я вам помочь не могу, т.к. служба тех поддержки не занимается вопросами скриптов и т.п.

Разве может такое быть - возможно в ваших скриптах есть некоторая несовместимость с данной версией MySQL ?

Как тогда сделать скрипты совместимыми?

По поводу запроса:

ALTER DATABASE `НазваниеВашейБазыДанных` DEFAULT CHARACTER SET cp1251 COLLATE cp1256_general_ci


... попросила выполнить, результатов пока не знаю.

   
 
 автор: Trianon   (07.05.2007 в 12:37)   письмо автору
 
   для: Barsuta   (07.05.2007 в 12:29)
 

Я очень извиняюсь, но 1256 в этой строчке - явная ошибка. Даже не представляю, что именно глюкануло в моем посте - строку я брал из отчета PMA.
Естественно, том должно быть COLLATE cp1251_general_ci

Никакой особой несовместимости в скриптах у Вас нет.
SQL- сервер отрабатывает сравнения при сортировке согласно характеристик полей.
Если сравнение задано в типе поля - он возьмет его оттуда - иначе будет смотреть на всю таблицу.
Если сравнение задано в характеристиках таблицы - он возьмет его оттуда - иначе будет смотреть на всю базу данных.
Поэтому я предложил установить сравнение на самом верхенм уровне - уровне БД.
Но с тем же успехом (и такие права у Вас явно есть) Вы можете указать его и для отдельной (или нескольких) таблицы. И для поля.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования