1

Тема: Опять эта кодировка!

Есть сервер у меня на машине: 
5.0.22-community-nt
MySQL charset: UTF-8 Unicode (utf8)
MySQL connection collation: utf8_general_ci

show variables like   'character%';
Variable_name    Value
character_set_client                     utf8
character_set_connection    utf8
character_set_database    cp1251
character_set_filesystem    binary
character_set_results                 utf8
character_set_server                    utf8
character_set_system                   utf8
character_sets_dir    C:\Program Files\MySQL\MySQL Server 5.0\share\charsets\

и  сервер на хостинге:
5.0.45-community-nt
MySQL Charset: UTF-8 Unicode (utf8)
MySQL connection collation: utf8_unicode_ci

Variable_name    Value
character_set_client                    cp1251
character_set_connection    cp1251
character_set_database    utf8
character_set_filesystem    binary
character_set_results                    cp1251
character_set_server                    cp1251
character_set_system                    utf8
character_sets_dir    C:\Program Files\VertrigoServ\Mysql\share\charsets\

делаю дамп базы.Вот результат:

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `amsu_frm`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `amsu_frm` /*!40100 DEFAULT CHARACTER SET cp1251 COLLATE cp1251_ukrainian_ci */;

USE `amsu_frm`;

--
-- Table structure for table `ams_news`
--

DROP TABLE IF EXISTS `ams_news`;
CREATE TABLE `ams_news` (
  `id` bigint(20) unsigned NOT NULL auto_increment,
  `image` varchar(80) NOT NULL,
  `news` text,
  `user_id` bigint(20) unsigned default NULL,
  `date_add` datetime NOT NULL,
  `visible` smallint(6) NOT NULL default '1',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `ams_news`
--


/*!40000 ALTER TABLE `ams_news` DISABLE KEYS */;
LOCK TABLES `ams_news` WRITE;
INSERT INTO `ams_news` VALUES (20,'logo.jpg','Ðàäèé ïîâ³äîìèòè, ùî ñòâîðåííÿ íåîô³ö³éíîãî ñàéòó Àêàäå쳿 ìèòíî¿ ñëóæáè Óêðà¿íè ï³äõîäèòü äî çàâåðøåííÿ. Íàä³þñÿ, ÷åðåç òèæäåíü ðîçïî÷àòè áåòà-òåñòóâàííÿ.',5,'2008-02-29 00:41:34',1);
UNLOCK TABLES;
/*!40000 ALTER TABLE `ams_news` ENABLE KEYS */;
...........
.........
.........

и в результате:
????? ??????????, ?? ????????? ???????????? ????? ???????? ?????? ?????? ??????? ????????? ?? ??????????. ???????, ????? ??????? ????????? ????-??????????.
Как это можна поправить?

2

Re: Опять эта кодировка!

Если бы вы открыли дамп в нормальном текстовом редакторе, то увидели бы такие крякозябы
?????
Это первое слово и по-русски "Радий".

Проблема в том что кирилица в кодировке cp1251 с сайта записывалась в БД при кодировке соединения latin1, да еще и в таблицы с кодировкой utf8. Разгребать теперь эти культурные наносы придется долго и мучительно.

Чтобы кодировка соединения устанавливалась правильно, необходимо в скрипте, при подключении выполнять запрос SET NAMES cp1251; или прописать выполнение данного запроса при каждом подключении, в конфигурационном файле (my.ini) с помощью строки в разделе [mysqld]:
init-connect="SET NAMES cp1251"

Если вам требуется перекодировка всего дампа, то будем разбираться отедльно.

3

Re: Опять эта кодировка!

Спасибо! А как можно перекодировать весь дамп?

4

Re: Опять эта кодировка!

ganzh
Если можете, то отправьте небольшой кусок дампа на hanut@php-myadmin.ru, только делайте так: сделайте копию файла дампа, откройте его в Notepad++ и удалите все, кроме структуры одной из таблиц и нескольких строк с крякозябами, сохраните файл, запакуйте его в 7z или zip архив и отошлите.

Если я смогу перекодировать, то потом опишу вам как это сделать.