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

Форум MySQL

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

 

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

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

тема: опять эти кракозябры
 
 автор: Dimonus   (13.02.2009 в 00:23)   письмо автору
 
 

Прощу прощения, тема изъезжена вдоль и поперек, но ничего сам не могу сделать. Вроде не дурак, и перечитал все что нашел в инете, но справится сам не могу.

Итак, скрипт, равно как и phpAdmin выдает в базе вместо русских букв кракозябры. База была перенесена на локальный комп (денвер) с интернет сайта с кодировкой utf8. Если в эксплорере выставляю кодировку utf8, то данные в базе вижу по русски одинаково хорошо, как и под phpAdmin так и из локального скрипта. Соответственно другие русские буквы как phpAdminа так сгенерированной скриптом страницы в этот момент - кракозябры. Мне нужно получать данные из SQL с кодировкой cp1251 т.к. мой сайт написан в этой кодировке.
Никакие set names, установка привелегий, и shar-setы не помогают.
Вот фрагмент скрипта:

$base="dimon_arw";
$sql_conn = mysql_connect ("localhost","base","arw");

mysql_query ("set names cp1251");
mysql_query("SET charset name=cp1251");
mysql_query ("set character_set_results=cp1251");

$qer=mysql_query ("SHOW GLOBAL VARIABLES LIKE 'char%'");
echo "$qer<br>";
while ($row=mysql_fetch_array ($qer))
{
echo "$row[0] | $row[1]<br>";
}
mysql_select_db ($base,$sql_conn);

Вот результат:
Resource id #5
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
character_sets_dir | \usr\local\mysql5\share\charsets\

Единствено чем можно поменять эти переменные, так это установкой
default-character-set = cp1251
в my.cnf. Но меняются ВСЕ ПЕРЕМЕННЫЕ ОДНОВРЕМЕННО, и кодировки базы, и переменные клиента, и опять кракозябры.

Вот:
Resource id #5
character_set_client | cp1251
character_set_connection | cp1251
character_set_database | cp1251
character_set_filesystem | binary
character_set_results | cp1251
character_set_server | cp1251
character_set_system | utf8
character_sets_dir | \usr\local\mysql5\share\charsets\

# skip-character-set-client-handshake
Это я заремарил, чтоб, как я понял принимались изменения переменных.
extension=php_mbstring.dll
ремарку убрал и библиотеку скачал и установил.

ЧТО ДЕЛАТЬ?
Извелся уже. Неделю бьюсь.

  Ответить  
 
 автор: Trianon   (13.02.2009 в 00:45)   письмо автору
 
   для: Dimonus   (13.02.2009 в 00:23)
 

вместо этого
mysql_query ("set names cp1251");
mysql_query("SET charset name=cp1251");
mysql_query ("set character_set_results=cp1251");
нужно написать одну строку
mysql_query("set character set 'cp1251'");

После этого неплохо вывести переменные...
И смотреть их надо не SHOW GLOBAL VARIABLES ... а просто SHOW VARIABLES ...
Но результат будет сильно зависеть от того, насколько корректно была перенесена база.

  Ответить  
 
 автор: Dimonus   (13.02.2009 в 00:53)   письмо автору
 
   для: Trianon   (13.02.2009 в 00:45)
 

Я пробовал и это. Ничего не дает.
Только что попробовал еще раз.
Вот результат:
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
character_sets_dir | \usr\local\mysql5\share\charsets\

  Ответить  
 
 автор: Trianon   (13.02.2009 в 00:56)   письмо автору
 
   для: Dimonus   (13.02.2009 в 00:53)
 

Это отклик именно SHOW VARIABLES?

  Ответить  
 
 автор: dimonus   (13.02.2009 в 01:29)   письмо автору
 
   для: Trianon   (13.02.2009 в 00:56)
 

Прошу прощения, недосмотрел.....
Вот отклик:

character_set_client | cp1251
character_set_connection | cp1251
character_set_database | cp1251
character_set_filesystem | binary
character_set_results | cp1251
character_set_server | utf8
character_set_system | utf8
character_sets_dir | \usr\local\mysql5\share\charsets\

т.е ошибка выходит в этом:
character_set_database | cp1251
Так?

Не пойму, у меня везде прописана кодировка utf8. Как же 1251 затесалась?

  Ответить  
 
 автор: Trianon   (13.02.2009 в 01:30)   письмо автору
 
   для: dimonus   (13.02.2009 в 01:29)
 

я ж говорю - базу криво импортировали.

Вернее - при создании не указали (либо непосредственно после создания - перед созданием таблиц в ней- не изменили) кодировку на utf8.

  Ответить  
 
 автор: Dimonus   (13.02.2009 в 08:09)   письмо автору
 
   для: Trianon   (13.02.2009 в 01:30)
 

Переделал все еще раз.
Создал базу вручную. Указал utf8.
Затем импортировал таблицу.
Кракозябры остались.

character_set_client | cp1251
character_set_connection | cp1251
character_set_database | utf8
character_set_filesystem | binary
character_set_results | cp1251
character_set_server | utf8
character_set_system | utf8
character_sets_dir | \usr\local\mysql5\share\charsets\

Я одного не пойму. Если я в эксплорере устанавливаю utf8 принудительно, и вижу данные нормально, значит экспорт и импорт прошел в utf8 и причем исправно прошел. Так? Следовательно если включив в эксплорере cp_1251 я вижу кракозябры, то не работает конвертация utf8 -> cp1251. Так?

  Ответить  
 
 автор: Trianon   (13.02.2009 в 08:56)   письмо автору
 
   для: Dimonus   (13.02.2009 в 08:09)
 

Если я в эксплорере устанавливаю utf8 принудительно, и вижу данные нормально, значит экспорт и импорт прошел в utf8 и причем исправно прошел. Так?

Нет. Сервер может выдавать utf8-данные в полном убеждении, что на самом деле выдает 1251.

Смотрите дамп.

  Ответить  
 
 автор: dimonus   (13.02.2009 в 10:51)   письмо автору
25.4 Кб
 
   для: Trianon   (13.02.2009 в 08:56)
 

Вот дамп таблицы, который отдал интернетовский phpAdmin. Там есть немного русских букв не в дампе. Не получается просмотреть их у меня ничем.

Вариантов получения другого дампа с сервера видимо нет. Там нет возможности вывести данные как-то иначе не меняя настроек сервера. А менять настройки боязно.

Не подскжете что за кодировка? Может знакома проблема?

  Ответить  
 
 автор: Trianon   (13.02.2009 в 11:18)   письмо автору
3 Кб
 
   для: dimonus   (13.02.2009 в 10:51)
 

Вот Ваш дамп исправленный.
в Кодировке cp1251 (если импортировать через phpMyAdmin - это нужно будет указать при импорте)

  Ответить  
 
 автор: Dimonus   (13.02.2009 в 11:38)   письмо автору
 
   для: Trianon   (13.02.2009 в 11:18)
 

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

  Ответить  
 
 автор: Trianon   (13.02.2009 в 11:46)   письмо автору
 
   для: Dimonus   (13.02.2009 в 11:38)
 

принцип зависит от того, что внутри дампа....
конкретно с Вашим я сделал следующее.
0) поглядел в дамп , увидел, что данные в нем как минимум один раз завернуты в utf8 , а затем - в hexadecmal формат, но в метаданных почему-то стоит cp1251.
1) убрал из оператора create table все упоминания collate cp1251_bin
2) изменил в нем же DEFAULT CHARSET=utf8
3) импортировал дамп в PMA (указав кодировку utf8)
4) экспортировал дамп, убрав вывод полей в hexadecimal и поставив режим совместимости MYSQL40
5) поглядел результат - понравилось. :)
6) дописал руками оператор SET CHARACTER SET 'cp1251' в начало дампа

(это если убрать пару неудачных попыток импорта - экспорта)

  Ответить  
 
 автор: Dimonus   (13.02.2009 в 11:52)   письмо автору
 
   для: Trianon   (13.02.2009 в 11:46)
 

Огромное спасибо.

  Ответить  
 
 автор: Dimonus   (13.02.2009 в 17:30)   письмо автору
 
   для: Dimonus   (13.02.2009 в 11:52)
 

Еще раз огромное спасибо!!!!!
ВЫ СПАСЛИ МЕНЯ!!!!
Научился все делать сам!!!!

  Ответить  
 
 автор: Trianon   (13.02.2009 в 17:36)   письмо автору
 
   для: Dimonus   (13.02.2009 в 17:30)
 

>Научился все делать сам!!!!

Это, конечно, не может не радовать.
Но по-моему, стоио бы научиться сразу получать корректный дамп.
А то ведь может и не свезти...

  Ответить  
Rambler's Top100
вверх

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