Проблема: восстановление cp1251->utf8 пустые значения

Что-то не работает? Пишите здесь.

Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST Andrei_ra » 06.02.2010 20:40:52

Второй час бьюсь над следующей проблемой с лайтом:
Правлю файл dumper.php: define('RESTORE_CHARSET', 'forced->utf8');
Делаю бекап лайтом, все ок, в архиве есть все значения, кодировка определяется
Восстанавливаю - сравнение полей и БД - utf8, но все поля имеющие русский текст пустые.
Делаю снова дамп, смотрю через блокнот, действительно все записи кириллицей стерлись.
Версию сегодня скачал с главной страницы.
Andrei_ra
 
Сообщения: 5
Зарегистрирован: 06.02.2010 20:34:38

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST zapimir » 06.02.2010 22:06:38

Дампер не делает перекодировки данных. Если хотите преобразовать из cp1251 в utf8, то нужно сделать бэкап указав кодировку define('CHARSET', 'utf8'); (либо выбрав кодировку в интерфейсе второй версии), а потом восстановить с define('RESTORE_CHARSET', 'forced->utf8'); (для версии 2 нужно выбрать кодировку utf8 и опцию коррекция кодировки).
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST Andrei_ra » 07.02.2010 11:10:34

Попробовал сработало, но на форуме по прежнему вопросы, добавляю новые посты в них все ок кириллица видна, и к тому же в phpadmin где на форуме показывает вопросы все хорошо читается, а новые записи которые читаются на форуме, в базе в виде каракуль. Думаю что проблема уже не в дампере, помогите решить эту проблему. В браузере в коде страницы стоит кодировка utf8.
Andrei_ra
 
Сообщения: 5
Зарегистрирован: 06.02.2010 20:34:38

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST Andrei_ra » 07.02.2010 11:12:13

переменные mysql хостера имеют следующий вид:
character set client utf8
(Глобальное значение) cp1251
character set connection utf8
(Глобальное значение) cp1251
character set database cp1251
character set filesystem binary
character set results utf8
(Глобальное значение) cp1251
character set server cp1251
character set system utf8
character sets dir /usr/share/mysql/charsets/
collation connection utf8_general_ci
(Глобальное значение) cp1251_general_ci
collation database cp1251_general_ci
collation server cp1251_general_ci

А это на главной странице phpadmin

MySQL - 5.0.32-Debian_7etch11-log
Protocol version: 10
Сервер: Localhost via UNIX socket
MySQL-кодировка: UTF-8 Unicode (utf8)
Andrei_ra
 
Сообщения: 5
Зарегистрирован: 06.02.2010 20:34:38

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST лиса » 07.02.2010 15:25:12

У меня база в кодировке ср1251, а данные в UTF. Пользуюсь второй версией дампера, Перенос базы получается без ошибки. Делаю так. При экспорте базы в настройках дампера ничего не меняю. Иначе, экспортирую базу как есть, в той же кодировке. Менять кодировку в дампере надо при импорте базы из дампа. Для этого на вкладке дампера ИМПОРТ нужно выбрать кодировку (у Вас utf8) и поставить птицу напротив опции "коррекция кодировки" в поле "Дополнительные опции".

Русские буквы в кодировке UTF сохраняются в виде кодов, а не букв. Чтобы их рассмотреть нужно перекодировать коды обратно в изображение букв, либо открывать дамп и создавать таблицу в той же кодировке (UTF)
лиса
 
Сообщения: 38
Зарегистрирован: 24.01.2010 09:11:10

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST Andrei_ra » 07.02.2010 21:13:04

Я так и пытался сначала все делать, да и на многих форумах так говорят, но таким образом поля с кириллицей оказываются пустыми, это точно. Проверено несколькими способами.
Andrei_ra
 
Сообщения: 5
Зарегистрирован: 06.02.2010 20:34:38

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST лиса » 07.02.2010 22:35:11

Есть ещё одино обстоятельство, к которому я пришла после многих попыток переноса базы, но так и не нашла объяснение этому.

Суть результата полученного мною в том, что перенос базы дампером получается в любой кодировке и даже без проблем можно перекодировать базу при импорте. Однако это у меня получалось, когда базы располагались на серверах в кодировках по умолчанию. То есть, как сервер создал сам кодировку базы так её и надо использовать. Если задавать кодировку в ручную то не удавалось потом экспортировать базу. Это повторялось неоднократно и проблема снималась при той кодировке базы, что на сервере стоит по умолчанию.

Вот сейчас я пыталась залить базу в UTF без перекодировки к хостеру, у которого по умолчанию ср1251 и облом вышел. Хотя я и кодировку дампера принудительно ставила в UTF при импорте. Поменяла кодировку на ср1251 при импорте и всё чудесным оьразом загрузилось на сервер к хостеру. База, естественно изменила кодировку с UTF на ср1251.
лиса
 
Сообщения: 38
Зарегистрирован: 24.01.2010 09:11:10

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST лиса » 07.02.2010 23:30:13

Вот спешу поделиться новостью, может не совсем в этой теме. Удалось поменять кодировки баз и на сервере и на локальном хосте. Кодировка менялась с помощью дампера втрой версии (лайт я просто не пробовала). Данные базы переносятся без искажений и всё теперь в одной кодировке и ьазы на хостингах и дамп. Причина того что мне не удавалось перенести базу, о чём я написала в предыдущем посту, была в неправильной настройке скрипта форума. Из за этого и были сбои в изображении русских букв, которые (сбои) исчезали в случае, если кодировки базы у хостера была установлена по умолчанию.

Спасибо этому форуму за помощь и огромное спасибо за помощь админу zapimir
лиса
 
Сообщения: 38
Зарегистрирован: 24.01.2010 09:11:10

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST Andrei_ra » 08.02.2010 08:24:20

Если кодировка в дампе соответствует кодировке сервера, то здесь и обычным импортом все без проблем делается.
Andrei_ra
 
Сообщения: 5
Зарегистрирован: 06.02.2010 20:34:38

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST лиса » 08.02.2010 09:21:06

Я тоже так думала, что только в этом случае будет успешный импорт базы. Оказалось, что дамперу безрачлична кодировка на сервере. Он создаёт ту кодировку которая нужна пользователю.

У хостера я взяла виртуальный хостинг. Он мне дал базу с названием. Я её не могу ни удалить, ни переименовать и изменить кодировку не могла. А дампер это сделал. У меня форум в UTF, а база у хостера по умолчанию была в ср1251. Теперь у хостера база тоже в UTF. И всё благодаря всемогущему дамперу. Может вопрос с кодировкой удалось бы решить и через саппорт хостера, но там как то вяло ответили на вопрос - у нас по умолчанию ср1251 и всё.
лиса
 
Сообщения: 38
Зарегистрирован: 24.01.2010 09:11:10

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST zapimir » 10.02.2010 00:04:56

Если в phpmyadmin правильно показываются русские буквы, а в форуме нет. Значит нужно настроить кодировку соединения в форуме. Если скажете какой форум используете, смогу более конкретно написать, где её настроить.

Просто для правильной работы с MySQL, не достаточно указать кодировки самих таблиц, нужно еще при подключении указывать в какой кодировке вы будете работать с MySQL. А сейчас получается что форум использует кодировку по умолчанию т.е. в вашем случае cp1251, при этом сами данные utf8, и таблицы в utf8. В итоге MySQL будет преобразовывать данные полученные от форума думая, что это они в cp1251.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST scoute » 25.02.2010 11:29:15

А можно технический вопрос?
Кодировка cp1251 бывает регистрозависимая, в некоторых случаях это жизненно важно,
но когда я попытался создать базу в UTF8(через phpmyadmin), в списке были только регистроНЕзависимые,
то есть на форуме логин и пароль можно хоть большими, хоть маленькими буквами, всё проходит на ура.
Как быть? Это недостаток пхп-админа или это в принципе невозможно?

Вот что сказал гугл:
If you need just WHERE to work case sensitively,
then you can still use utf8_croatian_ci and do searches like this:

SELECT ... WHERE column='string' and column=binary 'string';

If you need case sensitivity for uniqueness, the you can use utf8_bin
to control uniqueness, and at the same time "nice" ORDER BY,
then try this:

SELECT ... ORDER BY column COLLATE utf8_croatian_ci.

Но всё равно не понятно. То ли разработчики "mysql+UTF8" несмогли сделать по-нормальному,
либо же бинарное сравнение и является нормой для таких случаев.
А как же на самом деле?
scoute
 
Сообщения: 5
Зарегистрирован: 22.02.2010 17:27:31

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST zapimir » 25.02.2010 19:35:26

Да для регистрозависимости есть utf8_bin, причем его можно ставить на отдельную колонку, которая должна быть регистрозависимой. Но для логинов зачастую это не очень нужно (т.к. тогда в базе могут появиться юзеры Admin и admin), можно просто доставать юзера и потом дополнительно сравнивать его в php, чтобы логин введенный юзером и полученный из базы точно совпадали.
А что касается пароля, то пароли как бы не принято хранить в открытом виде в базе, а в виде хэша, а там без разницы регистр.
Ну и конечно phpmyadmin тут не причем.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Проблема: восстановление cp1251->utf8 пустые значения

UNREAD_POST лиса » 25.02.2010 20:36:08

У меня форум в UTF-8 и где это требуется форуму и по логике, есть зависимость от регистра. Что касается логина, то в нём нет зависимости от регистра как в UTF-8 так и в ср-1251, иначе был бы абсурд, когда логины у юзеров отличались бы высотой букв.

Относительно пароля. Зависимость от регистра есть в том числе и в UTF-8.

Всё написанное выше проверено мною только что на реальном форуме. Если у Вас не так, то неработают скрипты на Вашем сайте. Кодировка тут ни причём, если у Вас таблицы и данные в одной кодировке.
лиса
 
Сообщения: 38
Зарегистрирован: 24.01.2010 09:11:10


Вернуться в Проблемы и баги

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 6

Яндекс.Метрика