Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Haldross

Конвертирование кодировки БД

Recommended Posts

Приветствую.

Я ранее видел где-то 2 способа конвертации базы данных форума, сейчас потерял и не знаю какая надежней.

 

В общем-то мне нужно с 3.0.5 перейти на 3.1.х/3.2.х, а для этого, на сколько я знаю, нужно сделать конвертацию кодировки базы данных на utf-8.

 

Читал про способ скриптом, но честно говоря не особо вникал и ничего не понял.

Второй же способ - через Сайпекс дампер.

 

Делаем бэкап БД сразу в UTF-8, затем восстанавливаем эту БД, верно?

 

Но проблема в том, что не создается новая БД, а ставить UTF-8 поверх старой БД - по-моему неправильно.

 

В общем, мне нужна ваша помощь.

Как проще и надежней всего сделать сменить кодировку базы данных, чтобы ничего не утратить и без проблем заапгрейдить IPB с 3.0.5 на 3.1.4 ?

 

Заранее спасибо, надеюсь на понимание.

С ув. Haldross

Share this post


Link to post
Share on other sites

В общем-то мне нужно с 3.0.5 перейти на 3.1.х/3.2.х, а для этого, на сколько я знаю, нужно сделать конвертацию кодировки базы данных на utf-8.

3.0.5 уже должна работает в UTF8. Для апгрейда до 3.2 конвертация базы не требуется.

Share this post


Link to post
Share on other sites

3.0.5 уже должна работает в UTF8. Для апгрейда до 3.2 конвертация базы не требуется.

 

Если бы была в UTF-8 я разве создавал бы тему?

 

По-прежнему заглавное сообщение темы актуально. Помогите пожалуйста.

Share this post


Link to post
Share on other sites

Если бы была в UTF-8 я разве создавал бы тему?

Могли и создать.

 

По-прежнему заглавное сообщение темы актуально. Помогите пожалуйста.

А подробнее. 3.0.5 - английская или русская?

База данных в какой кодировке.

 

А таблицы?

А есть в этой базе таблицы в другой кодировке?

Share this post


Link to post
Share on other sites

3.0.5 русская

кодировка БД и таблиц cp1251_general_ci

Share this post


Link to post
Share on other sites

3.0.5 русская

И у вас она поставилась и работает???

Странно.

 

кодировка БД и таблиц cp1251_general_ci

Конвертор от Ritsuka -

<?php
// Database info

include("conf_global.php");

$dbhost = $INFO['sql_host'];
$dbuser = $INFO['sql_user'];
$dbpass = $INFO['sql_pass'];
$dbname = $INFO['sql_database'];

//---------------

header('Content-type: text/plain');

$dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() );
$db = mysql_select_db($dbname) or die( mysql_error() );

$sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci";
$result = mysql_query($sql) or die( mysql_error() );
print "Database changed to UTF-8.\n";

$sql = 'SHOW TABLES';
$result = mysql_query($sql) or die( mysql_error() );

while ( $row = mysql_fetch_row($result) )
{
$table = mysql_real_escape_string($row[0]);
$sql = "ALTER TABLE $table DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";
mysql_query($sql) or die( mysql_error() );
print "$table changed to UTF-8.\n";
}

mysql_close($dbconn);
?>

Помещаем как файл в корень форума и запускаем.

 

Бекап всего обязателен. Что-то у вас там не то. Глюки точно вылезут :)

Share this post


Link to post
Share on other sites

Версия IP.Board v3.0.5 (ID: *****)

MYSQL Версия MYSQL 5.0.77

Версия PHP 5.2.12 (apache)

 

Что у нас не то?

Можешь зайти сам посмотреть.

Share this post


Link to post
Share on other sites

Я конвертил когда переходил на 314

Тут описал метод

Share this post


Link to post
Share on other sites

Тут описал метод

А не проще было там же посмотреть первое сообщение темы? А не описывать азбуку в сотый раз.

 

Я конвертил когда переходил на 314

При переходе с 2.x.x При апгрейдах с 3.x.x конвертация не нужна.

Share this post


Link to post
Share on other sites

@Ph-A, твое сообщения наверное не ко мне относится. Я ведь хочу перейти с 3.0.5 и она у меня в cp1251_general_ci, апгрейд не ставится, просит кодировку UTF-8 :angry:

Share this post


Link to post
Share on other sites

@Haldross, разделяю удивление @Ph-A.

 

Во-первых, "русская версия IP.Board" тупо не ставится с кодирвкой, отличной от UTF-8. И не работает нормально.

 

Во-вторых, на вашем сайте:

		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

 

Напрямую берется из настроек в БД, и прописывается также при подключении к БД через SET NAMES. Если бы у вас в БД было cp_1251, то как минимум были бы проблемы с русскими буквами Р и Я, и обрезающимися рандомно постами. А обычно еще и посты превращаются в кашу...

 

Может быть, у вас дефолтная кодировка для всей БД стоит в cp_1251, а таблицы все же в UTF-8? Ну или ваш MySQL сервер хитро оттюнингован и уже давно стоически конвертирует все в две стороны "на лету". Сделайте скрин страницы с БД в phpmyadmin.

Share this post


Link to post
Share on other sites

@Haldross, разделяю удивление @Ph-A.

 

Во-первых, "русская версия IP.Board" тупо не ставится с кодирвкой, отличной от UTF-8. И не работает нормально.

 

Во-вторых, на вашем сайте:

		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

 

Напрямую берется из настроек в БД, и прописывается также при подключении к БД через SET NAMES. Если бы у вас в БД было cp_1251, то как минимум были бы проблемы с русскими буквами Р и Я, и обрезающимися рандомно постами. А обычно еще и посты превращаются в кашу...

 

Может быть, у вас дефолтная кодировка для всей БД стоит в cp_1251, а таблицы все же в UTF-8? Ну или ваш MySQL сервер хитро оттюнингован и уже давно стоически конвертирует все в две стороны "на лету". Сделайте скрин страницы с БД в phpmyadmin.

 

Форум не апгрейдится до 3.1.4 к примеру, пишет, что кодировка НЕ UTF-8.

 

Вот пожалуйста, скриншот:

 

post-46624-0-65597500-1317372542_thumb.png

Share this post


Link to post
Share on other sites

1. Сделайте полный бекап базы. Обязательно убедитесь, что бекап потом разворачивается :)

 

2. Ставьте форум в режим offline.

 

3. База у вас небольшая, тут не потребуется никаких дампов и SSH, хватит и скрипта на PHP, поэтому сохраняете следующий код как файл any_name_you_like.php в коре папки с форумом и выполняете.

 

3. Смотрите через phpmyadmin - все таблицы должны быть в UTF8. Если нет - конвертер не сработал. Восстанавливаем из бекапа и пробуем другие варианты.

 

4. Как только добились результата, включаете форум и проверяете, работает ли он как раньше.

 

Т.к. у вас сейчас форум работает и ему хоть бы хны, хотя база и в cp1251, значит у вас скрипт (нуль, как я вижу) не на базе скрипта от IBResource, и в нем нет "SET NAMES". А значит, после конвертирования весь форум может стать кракозябрами. Если это так, то, снова выключаете форум, и в файлы /ips_kernel/classDbMysqlClient.php и /ips_kernel/classDbMysqliClient.php находите функцию connect():

	public function connect()

 

и добавляете в конец перед:

        return TRUE;

   }

 

Строку:

$this->query( "SET NAMES utf8'" );

 

Снова включаете, проверяете. Должно заработать и показывать все нормально.

 

5. Все, форум в UTF8. Обновляйтесь.

Share this post


Link to post
Share on other sites

Спасибо, будет время - попробую.

Только если форум полетит - будет жесть...

Share this post


Link to post
Share on other sites

1. Сделайте полный бекап базы. Обязательно убедитесь, что бекап потом разворачивается :)

 

2. Ставьте форум в режим offline.

 

3. База у вас небольшая, тут не потребуется никаких дампов и SSH, хватит и скрипта на PHP, поэтому сохраняете следующий код как файл any_name_you_like.php в коре папки с форумом и выполняете.

 

3. Смотрите через phpmyadmin - все таблицы должны быть в UTF8. Если нет - конвертер не сработал. Восстанавливаем из бекапа и пробуем другие варианты.

 

4. Как только добились результата, включаете форум и проверяете, работает ли он как раньше.

 

Т.к. у вас сейчас форум работает и ему хоть бы хны, хотя база и в cp1251, значит у вас скрипт (нуль, как я вижу) не на базе скрипта от IBResource, и в нем нет "SET NAMES". А значит, после конвертирования весь форум может стать кракозябрами. Если это так, то, снова выключаете форум, и в файлы /ips_kernel/classDbMysqlClient.php и /ips_kernel/classDbMysqliClient.php находите функцию connect():

	public function connect()

 

и добавляете в конец перед:

        return TRUE;

   }

 

Строку:

$this->query( "SET NAMES utf8'" );

 

Снова включаете, проверяете. Должно заработать и показывать все нормально.

 

5. Все, форум в UTF8. Обновляйтесь.

 

Достаточно было convert.php. Кодировка идеально изменилась на utf8, потратил около минуты времени.

Спасибо огромное. Сейчас буду делать апгрейд на 3.1.4

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...