SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 23.12.2011 08:28:36

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Конвертация базы данных

Здравствуйте.
Является ли достаточным для конвертации базы данных из кодировки cp1251 в UTF-8 следующие манипуляции:


$result = $inDB->query('SHOW TABLES'); // получаем все таблицы
while($table = $inDB->fetch_assoc($result)){ // для каждой таблицы выполняем конвертацию и выставляем кодировку по умолчанию
    $inDB->query('ALTER TABLE '.$table['Tables_in_'.$inConf->db_base].' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci');
    $inDB->query('ALTER TABLE '.$table['Tables_in_'.$inConf->db_base].' DEFAULT CHARACTER SET utf8');
}
$inDB->query('ALTER DATABASE `'.$inConf->db_base.'` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
 

где, $inConf->db_base - имя БД

Неактивен

 

#2 23.12.2011 08:51:55

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5716

Re: Конвертация базы данных

Нет.

create table a (id int,name varchar(255) character set cp1251, unique key (name));
insert into a values(1,'веселый'),(2,'весёлый');
mysql> ALTER TABLE a CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
ERROR 1062 (23000): Duplicate entry 'весёлый' for key 'name'


Кроме того, конструкция CONVERT TO CHARACTER SET меняет также и дефолтную кодировку таблицы.

Неактивен

 

#3 23.12.2011 09:05:07

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Re: Конвертация базы данных

Спасибо за ответ.
Это не нужно, правильно я понял?

$inDB->query('ALTER TABLE '.$table['Tables_in_'.$inConf->db_base].' DEFAULT CHARACTER SET utf8');


По поводу буквы ё какой выход? Дважды конвертировать, сначала в utf8_bin, потом в utf8_general_ci?

Еще какие-нибудь варианты конвертации базы есть (кроме консольного и конвертации дампа)?

Неактивен

 

#4 23.12.2011 09:14:33

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5716

Re: Конвертация базы данных

fuze написал:

Это не нужно, правильно я понял?
[syntax=php]$inDB->query('ALTER TABLE '.$table['Tables_in_'.$inConf->db_base].' DEFAULT CHARACTER SET utf8');[/syntax

да


fuze написал:

По поводу буквы ё какой выход? Дважды конвертировать, сначала в utf8_bin, потом в utf8_general_ci?

Просто в bin, дважды не поможет.

fuze написал:

Еще какие-нибудь варианты конвертации базы есть (кроме консольного и конвертации дампа)?

С помощью php скрипта как это делаете вы smile

Неактивен

 

#5 23.12.2011 09:34:35

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Re: Конвертация базы данных

vasya написал:

Просто в bin, дважды не поможет.

Т.е. просто сконвертировать базу в utf8_bin и работать с таким сравнением?

$inDB->query('ALTER TABLE '.$table['Tables_in_'.$inConf->db_base].' CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin');

$inDB->query('ALTER DATABASE `'.$inConf->db_base.'` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin');


или я что-то недопонял?

Неактивен

 

#6 23.12.2011 09:53:40

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5716

Re: Конвертация базы данных

fuze написал:

Т.е. просто сконвертировать базу в utf8_bin и работать с таким сравнением?

да.

Неактивен

 

#7 23.12.2011 11:02:51

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Re: Конвертация базы данных

vasya, спасибо за ответы.

Неактивен

 

#8 25.12.2011 19:58:53

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Re: Конвертация базы данных

Вопрос в контексте темы:
Как быть с полнотекстовым поиском, регистр то теперь учитывается - utf8_bin.
Сравнения кроме utf8_bin есть, которые бы нормально работало с "ё" и т.п.
в общем чтобы о овцы целы и волки сыты)

Неактивен

 

#9 30.12.2011 21:22:36

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

Re: Конвертация базы данных

Я правильно понимаю, что Вы ищете сопоставление cp1251_general_cs?

Неактивен

 

#10 04.04.2012 13:04:46

fuze
Участник
Зарегистрирован: 25.01.2010
Сообщений: 17

Re: Конвертация базы данных

paulus написал:

Я правильно понимаю, что Вы ищете сопоставление cp1251_general_cs?

Я не знаю, что я ищу) Я хочу, чтобы работал полнотекстовый поиск в сравнении utf8 без учета регистра, как он работал при сопоставлении cp1251_general_ci.
Возможно ли это в принципе?

Отредактированно fuze (04.04.2012 13:09:33)

Неактивен

 

#11 22.11.2013 15:00:29

Зыч
Участник
Зарегистрирован: 22.11.2013
Сообщений: 7

Re: Конвертация базы данных

Салют базовики!
У меня тут одна базка на 3.23 требуют перейти на 4.1.3 и выше.. НАсколько реально.или .геморно..? неужели надо переходить на все предыдущие или можно сразу скакнуть ?

Неактивен

 

#12 22.11.2013 21:06:18

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3855

Re: Конвертация базы данных

Можно сразу, но обратите внимание на кодировки http://sqlinfo.ru/articles/info/5.html

Неактивен

 

#13 25.11.2013 10:10:28

Зыч
Участник
Зарегистрирован: 22.11.2013
Сообщений: 7

Re: Конвертация базы данных

rgbeast написал:

Можно сразу, но обратите внимание на кодировки http://sqlinfo.ru/articles/info/5.html

Спасибо за ответ.. Попытался на 5.5 сразу же махнуть. (У него хоть грамотная оболочка Workbench имеется). сделал экспорт в скрипт.. Потом попытался импортнуть.. куча матов )).. вобщем не все так просто получается...  Поскоку полный лох в это деле, был бы рад чисто философским советам типа...  слить в файл старую из 3.23, потом чонитьтам задать на 5.5  и импортнуть... Если такое возможно..

Неактивен

 

#14 25.11.2013 10:35:58

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3855

Re: Конвертация базы данных

Опишите ошибки, которые возникли при импорте? Там всего несколько слов нужно поправить и ошибок не будет.

Неактивен

 

#15 25.11.2013 12:05:04

Зыч
Участник
Зарегистрирован: 22.11.2013
Сообщений: 7

Re: Конвертация базы данных

rgbeast написал:

Опишите ошибки, которые возникли при импорте? Там всего несколько слов нужно поправить и ошибок не будет.

03:02:59 Restoring C:\Temp\stimul_wbnk.sql

Running: mysql.exe --defaults-extra-file="c:\users\admini~1\appdata\local\temp\tmpizifrp.cnf"  --host=localhost --user=root --port=3307 --default-character-set=utf8 --comments --database=stimul_wbnk < "C:\\Temp\\stimul_wbnk.sql"

ERROR 1064 (42000) at line 12: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 11


Operation failed with exitcode 1

03:03:00 Import of C:\Temp\stimul_wbnk.sql has finished with 1 errors

Типа того wink
А вот строка 12
CREATE TABLE `audit` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `login` varchar(20) default NULL,
  `ip_addr` varchar(15) default NULL,
  `tablename` varchar(30) default NULL,
  `oper` varchar(10) default NULL,
  `dt_oper` datetime default NULL,
  `zn` varchar(254) default NULL,
  `sqlbody` text,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

Отредактированно Зыч (25.11.2013 12:08:22)

Неактивен

 

#16 25.11.2013 12:11:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5716

Re: Конвертация базы данных

Слово TYPE замените на ENGINE

Неактивен

 

#17 25.11.2013 12:46:09

Зыч
Участник
Зарегистрирован: 22.11.2013
Сообщений: 7

Re: Конвертация базы данных

vasya написал:

Слово TYPE замените на ENGINE

Вроде как прорвало на чуть-чуть  а потом снова пошли ошибки.... значится не так все просто...  Я так понял что там есть возможность с живой базы импорнуть ?  подключившись к старому серверу..?

Неактивен

 

#18 25.11.2013 12:50:29

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3855

Re: Конвертация базы данных

С живой нельзя. Какие еще ошибки возникли?

Неактивен

 

#19 25.11.2013 12:56:47

Зыч
Участник
Зарегистрирован: 22.11.2013
Сообщений: 7

Re: Конвертация базы данных

rgbeast написал:

С живой нельзя. Какие еще ошибки возникли?

У меня такое предчувсствие что это тока начало )

---------------------------------------------------------------------------------------------------
Creating schema newschema



03:22:47 Restoring C:\Temp\stimul_wbnk.sql

Running: mysql.exe --defaults-extra-file="c:\users\admini~1\appdata\local\temp\tmp6lyui8.cnf"  --host=localhost --user=root --port=3307 --default-character-set=utf8 --comments --database=newschema < "C:\\Temp\\stimul_wbnk.sql"

ERROR 1366 (HY000) at line 116: Incorrect string value: '\xD1\xCA-\xD0\xE5\xF2...' for column 'sqlbody' at row 1


Operation failed with exitcode 1

03:22:47 Import of C:\Temp\stimul_wbnk.sql has finished with 1 errors
-------------------------------------------------------------------------------------------------

Хотя в строке 116 вроде такого криминального ничего нету по сравнению с предыдущими
INSERT INTO `audit` VALUES("45199","346331","10.122.22.119","","LOGIN","2013-10-03 10:44:59","","");

Неактивен

 

#20 25.11.2013 13:14:52

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3855

Re: Конвертация базы данных

какая кодировка данных? Указано ли SET NAMES имя_кодировки в начале файла дампа?

Неактивен

 

#21 25.11.2013 13:21:46

Зыч
Участник
Зарегистрирован: 22.11.2013
Сообщений: 7

Re: Конвертация базы данных

rgbeast написал:

какая кодировка данных? Указано ли SET NAMES имя_кодировки в начале файла дампа?

Нет ничего не указано... Там что-то пробегало насчет utf8.. Значит мне надо ее поставить?

Неактивен

 

#22 25.11.2013 20:36:30

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3855

Re: Конвертация базы данных

Посмотрите в какой кодировке файл и напишите set names имя_кодировки в начало файла. Альтернативно перекодируйте файл в utf8 и напишите SET NAMES UTF8. Посмотрите еще раз статью, на которую давал ссылку в начале.

Неактивен

 

#23 29.11.2013 09:43:06

Зыч
Участник
Зарегистрирован: 22.11.2013
Сообщений: 7

Re: Конвертация базы данных

rgbeast написал:

Посмотрите в какой кодировке файл и напишите set names имя_кодировки в начало файла. Альтернативно перекодируйте файл в utf8 и напишите SET NAMES UTF8. Посмотрите еще раз статью, на которую давал ссылку в начале.

Спасибо за помошь.. потихоньку движется..чую как  постепенно становлюсь MYSQL админом))

Неактивен

 

#24 23.02.2020 08:52:42

irbees2008
Участник
Зарегистрирован: 23.02.2020
Сообщений: 1

Re: Конвертация базы данных

Всем привет. Есть база MySQL  в кодировке win1251, при перекодировке в utf8 обрезаются данные строке text . Пробывал конвертировать средствами php, програмнно на компе и потом архивом закидывал в phpmyadmin, SQL запросом, без разницы. Данных в в строке не много

'SER|a:8:{s:3:\"url\";s:59:\"https://pxl.leads.su/click/ce29cb95b2e8160d06f23153d6190df1\";s:6:\"summa1\";s:3:\"500\";s:6:\"summa2\";s:5:\"25000\";s:4:\"old1\";s:2:\"18\";s:4:\"old2\";s:2:\"80\";s:5:\"srok1\";s:6:\"6 дней\";s:5:\"srok2\";s:1:\"2\";s:3:\"img\";s:3:\"137\";}'

Обрезается
SER|a:8:{s:3:\"url\";s:59:\"https://pxl.leads.su/click/ce29cb95b2e8160d06f23153d6190df1\";s:6:\"summa1\"

примерно так

Неактивен

 

Board footer

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