Искать  
 
   
 
Конвертирования базы в UTF-8
Отправлено: 10 Январь 2008 11:00 P.M.   [ Игнорировать ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  1423
Зарегистрирован  2007-12-27

Вообще стоит ли?
Как тут http://www.abcseo.com/papers/utf8-expression-engine.htm
или через конвертор?

 Подпись 

ExpressionEngine - SEO-ориентированный движок

Профиль
 
 
Отправлено: 04 Февраль 2008 10:42 P.M.   [ Игнорировать ]   [ # 1 ]
Администратор
RankRankRankRank
Всего сообщений:  1354
Зарегистрирован  2008-01-02

хорошая стать на тему  windows-1251 - UTF-8

 Подпись 

booooring…

Профиль
 
 
Отправлено: 14 Июль 2008 01:45 P.M.   [ Игнорировать ]   [ # 2 ]
Администратор
RankRankRankRank
Всего сообщений:  1354
Зарегистрирован  2008-01-02

Пост с хабры (в комментариях так же есть интересные высказывания)

Конвертация базы из Windows1251 в UTF8
Всем привет. Столкнулся с вопросом конвертации базы из CP1251 в UTF8.
Полазив по просторам Интернета не нашел готового скрита (видимо плохо искал).
Вот решил написать свой скриптп. Конвертация происходит безо всяких дампов базы. Решены проблемы с символами е = ё и т.д.

продолжение под катом

Пользуйтесь на здоровье.
Исправьте в начале скрипта открывающий тег. Хабр его режет, пришлось заэкранировать вопросик wink

UPD:
По просьбам трудящихся описываю алгоритм работы:
1. Переименовываем таблицу во временную.
2. Берем описание таблицы. В ней меняем defaul charset на utf8. Ставим collate utf8_bin(делается, чтобы буквы нормлаьно перекодировались. И не было проблем с е = ё и т.д. Но есть 1 трабла - при сравнении строковых значений будет учитываться регистр).
3. Отключаем использование ключей(увеличивается скорость вставки). ALTER TABLE table_in_utf8 DISABLE KEYS;
4. Вставляем данные из таблицы, которая у нас в cp1251 в таблицу с кодировкой utf8. INSERT INTO table_in_utf8 SELECT * FROM table_in_cp1251;
5. Включаем использование ключей ALTER TABLE table_in_utf8 ENABLE KEYS;

Ну а скриптег написан для того, чтобы не делать все это ручками, если в вашем проекте очень много таблиц.

запускать скрипт можно из консоли `php -f export.php` или через веб.


  <\?php

  $time = microtime(true);

  $db = ‘vspomni’;
  $login = ‘vspomni’;
  $passw = ‘’;
  $host = ‘vspomni.ru’;

  $res = mysql_connect($host, $login, $passw);
  mysql_select_db($db);

  mysql_query(‘SET NAMES utf8;’);


  $rs = mysql_query(‘SHOW TABLES;’);
  print mysql_error(); //the notorious ‘command out of synch’ message :(
  while (($row=mysql_fetch_assoc($rs))!==false) {

  $time1 = microtime(true);
  //print $row[‘Tables_in_vspomni2’].”\n”;
  $table_name = $row[‘Tables_in_’.$db];
  $query = ‘SHOW CREATE TABLE ‘.$table_name;

  $row_create = mysql_query($query);
  print mysql_error();
  $row1 = mysql_fetch_assoc($row_create);

  if (strpos($row1[‘Create Table’], ‘DEFAULT CHARSET=utf8’) !== false)
  {
  print ‘Table ‘.$table_name.’ - skipped’.”\n”;
  continue;
  }

  $create_table_scheme = str_ireplace(‘cp1251’, ‘utf8’, $row1[‘Create Table’]); // CREATE TABLE SCHEME
  $create_table_scheme = str_ireplace(‘ENGINE=InnoDB’, ‘MyISAM’, $create_table_scheme);
  $create_table_scheme .= ’ COLLATE utf8_bin’;

  //print $create_table_scheme;
  //continue;

  $query = ‘RENAME TABLE ‘.$table_name.’ TO ‘.$table_name.‘_tmp_export’; // RENAME TABLE;
  mysql_query($query);
  $error = mysql_error();
  if (strlen($error) > 0)
  {
  print $error.’ - LINE ‘.__LINE__.”\n”;
  break;
  }

  $query = $create_table_scheme;
  mysql_query($query);
  $error = mysql_error();
  if (strlen($error) > 0)
  {
  print $error.’ - LINE ‘.__LINE__.”\n”;
  break;
  }

  $query = ‘ALTER TABLE ‘.$table_name.’ DISABLE KEYS’;
  mysql_query($query);
  $error = mysql_error();
  if (strlen($error) > 0)
  {
  print $error.’ - LINE ‘.__LINE__.”\n”;
  break;
  }

  $query = ‘INSERT INTO ‘.$table_name.’ SELECT * FROM ‘.$table_name.‘_tmp_export’;
  mysql_query($query);
  $error = mysql_error();
  if (strlen($error) > 0)
  {
  print $error.’ - LINE ‘.__LINE__.”\n”;
  break;
  }


  $query = ‘DROP TABLE ‘.$table_name.‘_tmp_export’;
  mysql_query($query);
  $error = mysql_error();
  if (strlen($error) > 0)
  {
  print $error.’ - LINE ‘.__LINE__.”\n”;
  break;
  }

  $time3 = microtime(true);
  $query = ‘ALTER TABLE ‘.$table_name.’ ENABLE KEYS’;
  mysql_query($query);
  $error = mysql_error();
  if (strlen($error) > 0)
  {
  print $error.’ - LINE ‘.__LINE__.”\n”;
  break;
  }

  print ‘Enable keys to ‘.$table_name.’. time -’.(microtime(true) - $time3).”\n”;
  print ‘converted ‘.$table_name.’. time - ‘.(microtime(true) - $time1).”\n\n”;


  }
  mysql_free_result($rs);

  print ‘done. total time -’.(microtime(true) - $time);
  ?>

 Подпись 

booooring…

Профиль
 
 
Отправлено: 14 Июль 2008 03:21 P.M.   [ Игнорировать ]   [ # 3 ]
Администратор
Avatar
RankRankRankRank
Всего сообщений:  891
Зарегистрирован  2008-01-07

пасиб за линки, а то я все никак не могу решиться на перевод сайта в утф-8)))

Профиль