|
|
|
| Прощу прощения, тема изъезжена вдоль и поперек, но ничего сам не могу сделать. Вроде не дурак, и перечитал все что нашел в инете, но справится сам не могу.
Итак, скрипт, равно как и 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
ремарку убрал и библиотеку скачал и установил.
ЧТО ДЕЛАТЬ?
Извелся уже. Неделю бьюсь. | |
|
|
|
|
|
|
|
для: 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 ...
Но результат будет сильно зависеть от того, насколько корректно была перенесена база. | |
|
|
|
|
|
|
|
для: 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\ | |
|
|
|
|
|
|
|
для: Dimonus
(13.02.2009 в 00:53)
| | Это отклик именно SHOW VARIABLES? | |
|
|
|
|
|
|
|
для: 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 затесалась? | |
|
|
|
|
|
|
|
для: dimonus
(13.02.2009 в 01:29)
| | я ж говорю - базу криво импортировали.
Вернее - при создании не указали (либо непосредственно после создания - перед созданием таблиц в ней- не изменили) кодировку на utf8. | |
|
|
|
|
|
|
|
для: 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. Так? | |
|
|
|
|
|
|
|
для: Dimonus
(13.02.2009 в 08:09)
| | Если я в эксплорере устанавливаю utf8 принудительно, и вижу данные нормально, значит экспорт и импорт прошел в utf8 и причем исправно прошел. Так?
Нет. Сервер может выдавать utf8-данные в полном убеждении, что на самом деле выдает 1251.
Смотрите дамп. | |
|
|
|
|
 25.4 Кб |
|
|
для: Trianon
(13.02.2009 в 08:56)
| | Вот дамп таблицы, который отдал интернетовский phpAdmin. Там есть немного русских букв не в дампе. Не получается просмотреть их у меня ничем.
Вариантов получения другого дампа с сервера видимо нет. Там нет возможности вывести данные как-то иначе не меняя настроек сервера. А менять настройки боязно.
Не подскжете что за кодировка? Может знакома проблема? | |
|
|
|
|
 3 Кб |
|
|
для: dimonus
(13.02.2009 в 10:51)
| | Вот Ваш дамп исправленный.
в Кодировке cp1251 (если импортировать через phpMyAdmin - это нужно будет указать при импорте) | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2009 в 11:18)
| | За исправленный дамп огромное спасибо, но хотелось бы понять принцип, как Вы это сделали. Хотелось бы научиться и не задалбывать окружающих. | |
|
|
|
|
|
|
|
для: 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' в начало дампа
(это если убрать пару неудачных попыток импорта - экспорта) | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2009 в 11:46)
| | Огромное спасибо. | |
|
|
|
|
|
|
|
для: Dimonus
(13.02.2009 в 11:52)
| | Еще раз огромное спасибо!!!!!
ВЫ СПАСЛИ МЕНЯ!!!!
Научился все делать сам!!!! | |
|
|
|
|
|
|
|
для: Dimonus
(13.02.2009 в 17:30)
| | >Научился все делать сам!!!!
Это, конечно, не может не радовать.
Но по-моему, стоио бы научиться сразу получать корректный дамп.
А то ведь может и не свезти... | |
|
|
|