Нарушилась кодировка в БД MySQL

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

Нарушилась кодировка в БД MySQL

UNREAD_POST DRUG_ADDICT » 10.01.2010 04:01:46

есть БД:
запрос show variable; показывает:

Код: Выделить всё
character_set_client = utf8
character_set_connection =  utf8
character_set_database = utf8
character_set_filesystem = binary
character_set_results = utf8
character_set_server = utf8
character_set_system = utf8
collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci


делал в putty (SSH)...
*************************************
ПЕРВЫЙ ВАРИАНТ:
когда выполняю запрос в php (сам php файл в UTF-8):

mysql_query("INSERT INTO `database`.`table` (`text`) VALUES ('Привет');");

в БД записывается это: привет < смотрю через phpMyAdmin.
на странице (сам файл страницы в UTF-8 так же установлен content="text/html; charset=utf-8") вывожу это, вижу нормальный русский текст, тобишь "Привет".


ВТОРОЙ ВАРИАНТ:
делаю "насильно" после соединения с БД:
mysql_query("SET names 'utf8' COLLATE 'utf8_general_ci'");
и выполняю тот же выше приведенный запрос:
mysql_query("INSERT INTO `database`.`table` (`text`) VALUES ('Привет');");

в БД записывается слово "Привет" < смотрю через phpMyAdmin. вывожу это на страницу, вижу нормальный русский текст... в то время как то что я записывал ранее выводится уже как привет

*************************************
объясните мне пожалуйста почему так происходит при ПЕРВОМ ВАРИАНТЕ?
как перекодировать БД с помощью Sypex Dumper Lite 1.0.8. если туда всё записано по ПЕРВОМУ ВАРИАНТУ - вернее, объясните сам алгоритм, что на что кодировать?
есть альтернатива перекодированию?

PS. модуль php:
iconv - [color="SeaGreen"]есть[/color];
php-mbstring - [color="Red"]нету[/color], возможности установить - [color="Red"]нету[/color];


- для чего это? ответ: по первому варианту в БД с установленной utf8_general_ci поиск русских символов регистроЗАВИСИМ, когда по ВТОРОМУ ВАРИАНТУ поиск регистроНЕзависим.

огромное спасибо за ранее!
DRUG_ADDICT
 
Сообщения: 4
Зарегистрирован: 10.01.2010 03:58:06

Re: Нарушилась кодировка в БД MySQL

UNREAD_POST DRUG_ADDICT » 10.01.2010 04:04:16

а делал я уже так: соединение устанавливаю utf8 (auto) копирую бд, затем восстанавливаю в forced->cp1251, вижу в бд: ГђВќГ‘Ж’ ГђВЅГђВёГ‘в
устанавливаю соединение cp1251, копирую бд, затем восстанавливаю в forced->cp1251 вижу в бд: ?? ???????‚???µ?» (это ровняется к тому что данные уничтожены вовсе)

все ^_^ тоже самое делаю (как выше) только при восстановлении насильно использую forced->utf8, результат аналогичен. ну правда что, в последнем, знаков вопросов чуть меньше :D

=((( я в отчаяние... ПОМОГИТЕ!
DRUG_ADDICT
 
Сообщения: 4
Зарегистрирован: 10.01.2010 03:58:06

Re: Нарушилась кодировка в БД MySQL

UNREAD_POST zapimir » 12.01.2010 18:26:07

Возможно проблема в том что у самих таблиц или отдельных столбцов указана неправильная кодировка. Пришлите структуру таблицы (выполнив запрос "SHOW CREATE TABLE `table_name`"). Также можете скинуть в личку ссылку на дамп сделанный в режиме авто, так можно будет быстрее разобраться в чем именно проблема.
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Нарушилась кодировка в БД MySQL

UNREAD_POST DRUG_ADDICT » 13.01.2010 19:48:14

а проблема ужо решена! :)

оказывается по умолчанию кодировка соединения и т.д.и т.п. была:
Код: Выделить всё
 ...
| character_set_client            | latin1
| character_set_connection        | latin1
| character_set_database          | utf8
| character_set_filesystem        | binary
| character_set_results           | latin1
| character_set_server            | latin1
| character_set_system            | utf8
| character_sets_dir              | /usr/share/mysql/charsets/
| collation_connection            | latin1_swedish_ci
| collation_database              | utf8_general_ci
| collation_server                | latin1_swedish_ci 
 ...

по этому сами данные были в utf8, а метаданные таблички говорили, что она в
latin1, и соединение в latin1. короче, всё экспортировал так:
ssh:~ # mysqldump --default-character-set=latin1 -u root -p -h localhost -B database | sed 's/latin1/utf8/' > /home/ssh/dump.sql
теперь русский текст отображаться нормально, далее залил в бд этот бекап и вуууоля :cool:
DRUG_ADDICT
 
Сообщения: 4
Зарегистрирован: 10.01.2010 03:58:06

Re: Нарушилась кодировка в БД MySQL

UNREAD_POST zapimir » 15.01.2010 12:36:04

Тоже самое можно сделать в Dumper 2 сделать дамп выбрав кодировку Авто, после чего восстановить выбрав кодировку UTF8 и опцию Коррекция кодировки
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52

Re: Нарушилась кодировка в БД MySQL

UNREAD_POST alexd73 » 17.01.2010 22:59:01

У меня тоже проблема с переносом. Сайт в кодировке cp1251 Переношу все с помощью Sypex Dumper 2.0.5 Beta
phpmyadmin показывает русские правильно. на сайте приемнике знаки вопроса. Пробовал разные варианты экспорта-импорта. Либо зюхрюшки, либо знаки вопроса, либо просто пробелы.
Что влияет на кодировку? Настройки на исходном хосте:
Код: Выделить всё
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_unicode_ci
(Глобальное значение)    cp1251_general_ci
collation database    cp1251_general_ci
collation server    cp1251_general_ci

на конечном:
Код: Выделить всё
alexd@xfce4:~$ mysqladmin -uroot -p variables
Enter password:
+---------------------------------+-----------------------------+
| Variable_name                   | Value                       |
+---------------------------------+-----------------------------+
| character_set_client            | latin1                      |
| character_set_connection        | latin1                      |
| character_set_database          | latin1                      |
| character_set_filesystem        | binary                      |
| character_set_results           | latin1                      |
| character_set_server            | latin1                      |
| character_set_system            | utf8                        |
| character_sets_dir              | /usr/share/mysql/charsets/  |
| collation_connection            | latin1_swedish_ci           |
| collation_database              | latin1_swedish_ci           |
| collation_server                | latin1_swedish_ci           |


Вродебы различия видны.. но как привести к одинаковому виду? Я только нашел как менять default-charcter-set в my.cnf либо настройки в пределах одной сессии..
Да! И еще не маловажно: в дальнейшем я хочу перевести весь сайт в utf8.
зы: Прошу прощения за большие скрины - поправить нечем :(
Вложения
false.png
Конечный сайт
false.png (198.64 Кб) Просмотров: 10549
true.png
Исходный сайт
true.png (227.97 Кб) Просмотров: 10549
alexd73
 
Сообщения: 5
Зарегистрирован: 07.12.2009 23:24:37

Re: Нарушилась кодировка в БД MySQL

UNREAD_POST zapimir » 19.01.2010 15:47:36

Если в phpmyadmin русский текст показывается нормально значит, не настроена кодировка соединения в скрипте форума. После вызова mysql_connect нужно выполнять запрос
Код: Выделить всё
SET NAMES 'cp1251'

т.е. вставить код типа
Код: Выделить всё
mysql_query("/*!40101 SET NAMES 'cp1251' */") or die("Error: " . mysql_error());
zapimir
Site Admin
 
Сообщения: 1628
Зарегистрирован: 01.10.2009 22:39:52


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

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