Проблема переноса дампа с сервера на локаль

Gostemilov

Новичок
Проблема переноса дампа с сервера на локаль

дело в том, что мой хостер произвел апгрейд с 4.0 на 4.1.9стандарт и в качестве кодировки по умолчанию установли UTF8 (почему, не знаю, видно ума не хватило). Теперь все юзеры, которые создавали базф путем заливки дампов, созданных в более ранних версиях (как и я) столкнулить с проблемой вопросителдьных знаков и кириллицы. Обьяснить хостеру, что и как надо сдлелать (а я уже знаю) - невозможно, там сидит "технический специалист" с готовым ответом на все вопросы - "А чего Вы от нас хотите).

Надо привести локаль в соответствие с сервером. В charsets UTF8 нет.

Конфиг:
сервер:
PHP 4.4.1
MySQL 4.1.9standard UTF8
Локаль
PHP 4.4.0
MySQL 4.1.8 cp1251

Как бы установить кодировку по умолчанию в UTF8? Заранее благодарен. Для меня это очень срочно.

На сервере:



В локали:



И уж совсем непонятно, почему контент сайта на страницу выводится верно, если

 

vovanium

Новичок
И уж совсем непонятно, почему контент сайта на страницу выводится верно, если
Потому, что кодировка в данном случае в основном влияет на сортировку и сравнение данных, код символа ведь не меняется.

Кодировка UTF-8 стоит себе по умолчанию и никого не напрягает, т.к. любой MySQL-клиент может указывать желаемую кодировку при каждом подключении, а также каждая таблица может иметь свою кодировку.

Тебе же скорее всего нужно просто поставить cp1251 кодировку для всех таблиц. А ты на скриншотах приводишь кодировку которую клиент (в данном случае pma) использует для соединения с базой.
 

Gostemilov

Новичок
Я, потому как нет резервного дампа, экспериментировать с сервером не могу. А в локали - смена cp1251 на UTF8 как в my.cnf так и в свойствах таблиц приводит к нечитаемости(причем безвозвратной) данных.

Команда разработчиков Sypex Dumper помогла (спасибо им большое) и я смог вытащить читаемый (хотя только в режиме просмотра по F3 в Total Commander) дамп.

Но как отредактированный дамп загнать назад? Советы типа "ручками" не принимаются, ибо счет записям в БД идет на сотни тысяч. А я на диалапе. Да хоть бы и на выделенке.

Хорошо, посталю вопрос иначе. Если я верну предыдущее состояние локали (PHP 4.3.9 MySQL 3.5.3) в которой за последние 2 года не было ни единого сбоя - есть ли возможность как-то обмениваться дампами с сервером?
 

fixxxer

К.О.
Партнер клуба
то есть, дамп в 1251 у тебя есть? ну тогда все просто.
первой строкой дампа
set names cp1251; (этот же запрос выполнять во всех скриптах сразу после mysql_connect)
в каждом create table:
create table (...) default charset=cp1251;
и перезалить.
 

Gostemilov

Новичок
Так. Стоп. Первой строкой - все ясно. А полностью строку
CREATE... можете привести? А то у меня столько вариантов...
 

Фанат

oncle terrible
Команда форума
это ты шутишь так остроумно?
ты действительно считаешь, что дядя с форума приведёт тебе "строку create" для таблицы, которую никогда в глаза не видел?
 

Gorynych

Посетитель PHP-Клуба
Gostemilov
еще вариант перевода дампа из cp-1251 в UTF8 - использовать стандартный notepad :)

если размер дампа таков, что откроется с стандартном блокноте, то... Запускаете notepad. Открываете файл дампа (тип файлов ставите -"Все файлы").

после этого выбираете Файл -> Сохранить как...

в диалоге сохранения опять выставляете тип файлов - "Все файлы" и ... (внимание!) в меню "Кодировка" выбираете кодировку сохраняемого файла UTF-8!!!

смешно? А между прочим работает и всегда под рукой :)
 

fixxxer

К.О.
Партнер клуба
Он ошибается, когда говорит, что ему нужно все перевести в utf-8. На самом деле ему нужно, чтобы mysql работал с кодировкой cp1251.
 

Gorynych

Посетитель PHP-Клуба
fixxxer
тогда может проще поменять везде varchar на varbinary?
 

fixxxer

К.О.
Партнер клуба
а зачем делать через жопу?

p.s. замена charset=utf-8 на charset=cp1251 по всему дампу - это непосильная задача, ага.
 

Gorynych

Посетитель PHP-Клуба
fixxxer
мне-то как раз кажется, что создавать на сервере собранном с умолчательной кодировкой UTF-8 таблицы с кодировкой cp-1251 - вот это как раз и есть "через жопу".

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

fixxxer

К.О.
Партнер клуба
какая разница, какая кодировка по умолчанию?
почитай, что ли, на досуге, документацию по mysql 4.1.
 

Gorynych

Посетитель PHP-Клуба
если не ошибаюсь fixxxer == Константин?

а вот скажите, Константин, знакомо ли вам понятие "толерантность"?

P.S. на досуге поработайте над своим умением общаться.
 

fixxxer

К.О.
Партнер клуба
ой, даже на "Вы", как приятно. уважаемый Горыныч (простите, не знаю имени-отчества), благодарю за совет. В свою очередь, советую Вам поработать над тем, чтобы не давать неправильных советов, особенно новичкам, которые по незнанию могут им последовать.
 

Gorynych

Посетитель PHP-Клуба
fixxxer
несовпадение варианта решения с избираемым Вами не делает его неправильным.

Почитайте на досуге "Малый энциклопедический словарь" Брокгауза и Ефрона на предмет значения слова "шоры"
 

fixxxer

К.О.
Партнер клуба
Спасибо, я знаю значение этого слова. Так и быть, поясню свое мнение.

MySQL начиная с версии 4.1 поддерживает работу с множеством кодировок, и установка по умолчанию - не более, чем установка по умолчанию. Заданием кодировки базы, таблицы и соединения можно без проблем обеспечить работу с нужной кодировкой (для этого и произведены эти изменения в MySQL). Это все подробно описано в документации (http://dev.mysql.com/doc/refman/4.1/en/charset-syntax.html) и местном FAQ.
В вашем же случае будут проблемы с регистронезависимым поиском и прочими зависящими от локали операциями. По сути это костыль, которым приходилось пользоваться в версиях 4.0 и старше. Думаю, вы используете setlocate при необходимости. Так здесь тот же случай.

Благодарю за внимание :)
 

Gorynych

Посетитель PHP-Клуба
fixxxer
примерно так. Только в моем случае как раз приходилось переводить все Unicode (потому локальная кодировка базы данных как-то не очень способствует работе с данными на английском, испанском и русском).
 

fixxxer

К.О.
Партнер клуба
Хм, ну мы здесь вроде бы обсуждаем не твой случай, а случай Гостемилова. Если надо хранить данные в utf-8 при отсутствии поддержки оного СУБД, тут varbinary, конечно, приемлемое решение, я разве спорю...
 

Gostemilov

Новичок
О. Господи. Да, я остроумный. До слез. До рвоты. Я третью неделю бюьсь этой самой об стол из этого раЯ не выходит ничего. Давайте основывать клуб юмористов. В качестве первоначального взноса - с моей стороны- логин и пасс в личку любому желающему посмотреть, что же тут можно сделать.
 

Gorynych

Посетитель PHP-Клуба
Gostemilov у меня возник вопрос: скажите, а Вы с сервером базы данных умеете только через phpMyAdmin общаться? Т.е. все операции создания таблиц, дампов и прочее Вы делаете только так?
 
Сверху