|
|
|
| Здравствуйте!
Целый день мучаюсь с одной проблемой. Создала дамп базы данных 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
Написала письмо хостерам - ни ответа, ни привета. Помогите, пожалуйста.
Прикрепила дамп базы. | |
|
|
|
|
|
|
|
для: Barsuta
(30.04.2007 в 02:08)
| | Как офф-топ:
измените значения паролей в таблице user... а то всё как на блюдечке.. | |
|
|
|
|
|
|
|
для: Barsuta
(30.04.2007 в 02:08)
| | Добавьте в начало дамп строку
| |
|
|
|
|
|
|
|
для: cheops
(30.04.2007 в 13:08)
| | Пробовала, бесполезно.
???‚?µ??????
А вообще правильные данные я указываю при импорте файла ?
MySQL-кодировка: UTF-8 Unicode (utf8)
Сопоставление соединения с MySQL: cp1251_general_ci
Во вкладке Операции--->Сравнение: cp1251_general_ci
Хостеры ответили, что мне необходимо создавать дамп и заливать через shell. Для меня это темный лес. Я всегда пользовалась phpmyadmin.
Что делать - не знаю! | |
|
|
|
|
|
|
|
для: Barsuta
(30.04.2007 в 02:08)
| | А какая версия сервера на новом хостинге?
И нет ли возможности экспортировать дамп со старого более свежим phpMyAdmin? | |
|
|
|
|
|
|
|
для: Trianon
(30.04.2007 в 19:33)
| | Версия сервера: 4.1.22 | |
|
|
|
|
|
|
|
для: Barsuta
(30.04.2007 в 20:41)
| | Спасибо за внимание. Хостеры решили эту проблему. Тема закрыта. | |
|
|
|
|
|
|
|
для: Barsuta
(01.05.2007 в 13:13)
| | Рановато я тему-то закрыла. Проблему якобы решила, добавив в файл запроса к базе строку
mysql_query("SET NAMES 'cp1251'");
Но я только что заметила, что не работает сортировка по алфавиту. В чем может быть проблема? | |
|
|
|
|
|
|
|
для: Barsuta
(05.05.2007 в 00:05)
| | Сортируете при помощи конструкции ORDER BY? Какую кодировку по умолчанию имеет таблица? | |
|
|
|
|
|
|
|
для: 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;
}
?>
|
| |
|
|
|
|
|
|
|
для: Barsuta
(05.05.2007 в 10:08)
| | А на странице, где неправильная сортировка имеются какие-нибудь SQL-запросы? Поищите там SQL-запрос, который начинается с ключеового слова SELECT? | |
|
|
|
|
|
|
|
для: 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))
{
...
}
...
|
[поправлено модератором: объёмные листинги, лучше прикреплят в виде файла] | |
|
|
|
|
|
|
|
для: Barsuta
(05.05.2007 в 14:04)
| | Покажите пожалуйста структуру таблицы tov
Структуру можно получить в разделе экспорт программы phpMyAdmin - фактически интересует текст оператора
CREATE TABLE ... tov (
....
) .... | |
|
|
|
|
|
|
|
для: 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 ;
|
| |
|
|
|
|
|
|
|
для: Barsuta
(06.05.2007 в 11:07)
| | Попробуйте выполнить следующий оператор:
ALTER DATABASE `НазваниеВашейБазыДанных` DEFAULT CHARACTER SET cp1251 COLLATE cp1256_general_ci
|
Выполнить его можно из PMA-раздела "Операции" указав внизу сравнение cp1251_general_ci
Если у Вас нет привилегий на такую операцию, придется попросить хостера выполнить её . | |
|
|
|
|
|
|
|
для: 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';");
?>
|
| |
|
|
|
|
|
|
|
для: Unkind
(06.05.2007 в 01:17)
| | Вообще-то если дамп в utf-8 - это еще не значит, что текст в таблицах в utf-8.
Характеристики таблиц первого дампа явно показывали, что текст в cp1251. | |
|
|
|
|
|
|
|
для: Trianon
(06.05.2007 в 01:27)
| | Характеристики таблиц, как ни странно, тоже не могут явно указывать на то, в какой кодировке содержимое. Некоторые не могут разобраться с кодировкой для полей в таблицах. | |
|
|
|
|
|
|
|
для: Unkind
(06.05.2007 в 01:29)
| | Если характеристика таблицы не соответствует фактическому содержитмому полей, это значит, что содержимое БД искажено. При внесении данных или в процессе импорта - вопрос другой. Искаженное содержимое обычно сразу видно в клиенте администратора.
А здесь же, насколько я понимаю проблема в том, как правильно работать с корректной БД. | |
|
|
|
|
|
|
|
для: Trianon
(06.05.2007 в 15:39)
| | Вот, что мне сегодня ответила агава:
Сервер функционирует нормально, возможно в ваших скриптах есть некоторая несовместимость с данной версией MySQL. В этом случае я вам помочь не могу, т.к. служба тех поддержки не занимается вопросами скриптов и т.п.
Разве может такое быть - возможно в ваших скриптах есть некоторая несовместимость с данной версией MySQL ?
Как тогда сделать скрипты совместимыми?
По поводу запроса:
ALTER DATABASE `НазваниеВашейБазыДанных` DEFAULT CHARACTER SET cp1251 COLLATE cp1256_general_ci
|
... попросила выполнить, результатов пока не знаю. | |
|
|
|
|
|
|
|
для: Barsuta
(07.05.2007 в 12:29)
| | Я очень извиняюсь, но 1256 в этой строчке - явная ошибка. Даже не представляю, что именно глюкануло в моем посте - строку я брал из отчета PMA.
Естественно, том должно быть COLLATE cp1251_general_ci
Никакой особой несовместимости в скриптах у Вас нет.
SQL- сервер отрабатывает сравнения при сортировке согласно характеристик полей.
Если сравнение задано в типе поля - он возьмет его оттуда - иначе будет смотреть на всю таблицу.
Если сравнение задано в характеристиках таблицы - он возьмет его оттуда - иначе будет смотреть на всю базу данных.
Поэтому я предложил установить сравнение на самом верхенм уровне - уровне БД.
Но с тем же успехом (и такие права у Вас явно есть) Вы можете указать его и для отдельной (или нескольких) таблицы. И для поля. | |
|
|
|