SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.03.2011 21:50:36

recived
Участник
Зарегистрирован: 24.03.2011
Сообщений: 3

Как определить кодировку данных и как конвертнуть в utf8

Всем доброго времени суток. Возникла глобальная проблема с кодировкой БД. Кодировка как говорят была вроде cp1251 до переноса на другой сервер. Сейчас все в utf8. Но в самой базе отображаются кракозябры. Вывод данных на сайт в cp1251 нормально. Подскажите как все данные перегнать в utf8. И вообще какая сейчас кодировка у данных? Декодер лебедева так показал CP1252 → CP1251. Вот пример:

-- phpMyAdmin SQL Dump
-- version 3.3.8.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Мар 24 2011 г., 12:22
-- Версия сервера: 5.1.47
-- Версия PHP: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!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 */;



-- --------------------------------------------------------

--
-- Структура таблицы `smf_boards`
--

CREATE TABLE IF NOT EXISTS `smf_boards` (
`ID_BOARD` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`ID_CAT` tinyint(4) unsigned NOT NULL DEFAULT '0',
`childLevel` tinyint(4) unsigned NOT NULL DEFAULT '0',
`ID_PARENT` smallint(5) unsigned NOT NULL DEFAULT '0',
`boardOrder` smallint(5) NOT NULL DEFAULT '0',
`ID_LAST_MSG` int(10) unsigned NOT NULL DEFAULT '0',
`ID_MSG_UPDATED` int(10) unsigned NOT NULL DEFAULT '0',
`memberGroups` varchar(255) NOT NULL DEFAULT '-1,0',
`name` tinytext NOT NULL,
`description` text NOT NULL,
`numTopics` mediumint(8) unsigned NOT NULL DEFAULT '0',
`numPosts` mediumint(8) unsigned NOT NULL DEFAULT '0',
`countPosts` tinyint(4) NOT NULL DEFAULT '0',
`ID_THEME` tinyint(4) unsigned NOT NULL DEFAULT '0',
`permission_mode` tinyint(4) unsigned NOT NULL DEFAULT '0',
`override_theme` tinyint(4) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`ID_BOARD`),
UNIQUE KEY `categories` (`ID_CAT`,`ID_BOARD`),
KEY `ID_PARENT` (`ID_PARENT`),
KEY `ID_MSG_UPDATED` (`ID_MSG_UPDATED`),
KEY `memberGroups` (`memberGroups`(48))
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;

--
-- Дамп данных таблицы `smf_boards`
--

INSERT INTO `smf_boards` (`ID_BOARD`, `ID_CAT`, `childLevel`, `ID_PARENT`, `boardOrder`, `ID_LAST_MSG`, `ID_MSG_UPDATED`, `memberGroups`, `name`, `description`, `numTopics`, `numPosts`, `countPosts`, `ID_THEME`, `permission_mode`, `override_theme`) VALUES
(14, 1, 0, 0, 1, 53867, 53867, '-1,0,2,9,14,17,18,19,20,21', '<font color="#FF0000">ÂÍÈÌÀÍÈÅ ÂÑÅÌ! ÏÐÀÂÈËÀ ÏÎËÜÇÎÂÀÍÈß ÔÎÐÓÌÎÌ</font>', 'ïðàâèëà ïîëüçîâàíèÿ è èõ îáñóæäåíèå', 4, 153, 0, 0, 0, 0),
(9, 1, 0, 0, 2, 79201, 79201, '-1,0,2,9,14,17,18,19,20,21', 'Âîïðîñû ïî ðàáîòå ôîðóìà', 'Âîïðîñû è ïîæåëàíèÿ', 35, 850, 0, 0, 0, 0),
(33, 1, 0, 0, 3, 79851, 79851, '-1,0,2,17,14,18,19,20,21', 'Ñèíãàïóð: íîâîñòè, ïîëèòèêà, èñòîðèÿ, êóëüòóðà, âåðîâàíèÿ, òðàäèöèè, àäàïòàöèÿ..', '', 114, 3667, 0, 0, 0, 0),

Неактивен

 

#2 24.03.2011 22:28:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как определить кодировку данных и как конвертнуть в utf8

Вкратце: декодер Лебедева был прав.

Подробнее:
recode -f utf8..latin1 dump.sql
recode -f cp1251..utf8 dump.sql

Ну и ссылка на статью на всякий случай: http://sqlinfo.ru/articles/info/5.html

Неактивен

 

#3 25.03.2011 23:32:13

recived
Участник
Зарегистрирован: 24.03.2011
Сообщений: 3

Re: Как определить кодировку данных и как конвертнуть в utf8

Спасибо большое помогло. Но теперь возникла проблема что сайту отдаются знаки вопроса. Возможно ли это из-за character_set_server     latin1?

SHOW VARIABLES LIKE "char%"
character_set_client     utf8
character_set_connection     utf8
character_set_database     utf8
character_set_filesystem     binary
character_set_results     utf8
character_set_server     latin1
character_set_system     utf8
character_sets_dir     /usr/share/mysql/charsets/

Работает если вставить.
       mysql_query("SET NAMES utf8");
        mysql_query("SET CHARACTER SET utf8;");

Отредактированно recived (25.03.2011 23:59:03)

Неактивен

 

#4 26.03.2011 00:37:04

recived
Участник
Зарегистрирован: 24.03.2011
Сообщений: 3

Re: Как определить кодировку данных и как конвертнуть в utf8

Если выставить mysql_query("SET CHARACTER SET utf8;"); то при то если например оставлять сообщения на форуме то вываливаются знаки вопроса. Если заккоментировать то нормально все.

Неактивен

 

#5 26.03.2011 13:26:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как определить кодировку данных и как конвертнуть в utf8

Нужно делать SET NAMES в кодировку, которую ожидаете получить (кодировку
текста страниц сайта).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson