1 (изменено: TaNaToS, 2008-04-02 12:21:14)

Тема: Кодировка)

У меня следующая проблема:
Есть сайт на локалхосте - работает как часы.
Переношу его на сервер - все отображается в виде абракадабры.
Нормальный дамп с кириллицей сделатьне удается.
В phpMyAdmin'е даже на локале текст отображается криво.
Кодировка utf-8.

фрагмент дампа:

--
-- Table structure for table `mos_linkexchange_categories`
--

DROP TABLE IF EXISTS `mos_linkexchange_categories`;
CREATE TABLE `mos_linkexchange_categories` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `title` varchar(255) NOT NULL default '',
  `description` varchar(255) NOT NULL default '',
  `published` tinyint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

--
-- Dumping data for table `mos_linkexchange_categories`
--

LOCK TABLES `mos_linkexchange_categories` WRITE;
/*!40000 ALTER TABLE `mos_linkexchange_categories` DISABLE KEYS */;
INSERT INTO `mos_linkexchange_categories` VALUES (1,'Зефир','Зефиры \"Le Nuage\"',1),(2,'Сок','Соки \"Солнечное лето\"',1),(3,'Уксус','Уксус \"КомисКом\"',1);
/*!40000 ALTER TABLE `mos_linkexchange_categories` ENABLE KEYS */;
UNLOCK TABLES;

Пробовал менять кодировку - ничего не получается.
Подскажите, пожалуйста, что делать.


SHOW VARIABLES LIKE 'char%';

character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir E:\MyServer\MySQL\share\charsets/

Возможно ли перекодировать текст? (заново вбивать о-о-очень много) и куда именно надо прописать SET NAMES?

2

Re: Кодировка)

TaNaToS сказал:

Пробовал менять кодировку - ничего не получается.

Где и как вы это делали?

TaNaToS сказал:

куда именно надо прописать SET NAMES?

В my.ini, в раздел [mysqld] добавьте строку:
init-connect="SET NAMES 'utf8'"

Но уже существующие данные это не спасет.
Мне не понятно как у вас получились такие крякозябы, предполагаю, что вы меняли кодировку таблиц в phpMyAdmin, что делать ни в коем случае было нельзя. Если у вас есть исходный дамп (до смены кодировки), покажите как данные выглядят там.

Причина крякозябов в том что данные в utf8 сохранялись в таблицах с кодировкой latin1.

3 (изменено: TaNaToS, 2008-04-02 15:49:02)

Re: Кодировка)

Hanut сказал:
TaNaToS сказал:

Пробовал менять кодировку - ничего не получается.

Где и как вы это делали?

Менял на сервере. На локале вроде бы не менял

Hanut сказал:
TaNaToS сказал:

куда именно надо прописать SET NAMES?

В my.ini, в раздел [mysqld] добавьте строку:
init-connect="SET NAMES 'utf8'"

Но уже существующие данные это не спасет.
Мне не понятно как у вас получились такие крякозябы, предполагаю, что вы меняли кодировку таблиц в phpMyAdmin, что делать ни в коем случае было нельзя. Если у вас есть исходный дамп (до смены кодировки), покажите как данные выглядят там.

Причина крякозябов в том что данные в utf8 сохранялись в таблицах с кодировкой latin1.

Дампа старее нет sad
Есть ли возможные пути решения и восстановления информации??? Сайт на локале из этой БД работает идеально.

4

Re: Кодировка)

TaNaToS
Дайте ссылку на дамп, попробую посмотреть.

5

Re: Кодировка)

Hanut
Судя по всему вы меняли кодировку на таблицах или БД, так как данные восстановить не удается.

6

Re: Кодировка)

Спасибо. я просто не понимаю, как же тогда скрипт интерпретирует то что в дампе в адекватный русский текст.

7

Re: Кодировка)

TaNaToS
Данные в utf8 ложатся в БД в таблицы с кодировкой latin1, затем при выборке они читаются тоже как latin1, не смотря на то что данные на самом деле в utf8. Страницу браузер отображает в utf8, поэтому в каком виде данные вводились, в таком они и выводятся.

Ваш дамп был почему-то сохранен в ANSI, а не в utf8, как обычно должен, поэтому символы Юникода выходящие за рамки таблицы символов latin1 не поддаются перекодированию. Если вы сможете сохранить дамп в utf8, то можно попробовать перекодировать его.