SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 03.11.2009 15:12:13

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

В базе со 100 таблицами смена сравнения SET COLLATE sql-запросом utf-8_unicode_ci

База по ошибке была создана в utf8_BIN(представление в бинарных числах). Мне надо перегнать всю базу в utf8_unicode_ci(хостинг рубит на пробелы все представления в числах там где текстовые поля)

Работают отдельные комманды типа ALTER TABLE 'sss' DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci, а хочу автоматом так перегнать всю базу включая все поля в таблицах созданные в BIN сравнении на utf-8_unicode_ci сравнение.

например уже
ALTER TABLE * DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci не работает. Где ошибка?

Отредактированно q3000 (03.11.2009 15:13:08)

Неактивен

 

#2 03.11.2009 15:33:17

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

Re: В базе со 100 таблицами смена сравнения SET COLLATE sql-запросом utf-8_unicode_ci

В звездочке, разумеется. Нет команды «ALTER TABLE *». Можете написать
какой-то простой сценарий, который сделает это за Вас:

mysql -NBe "show tables" dbname | xargs -i@ mysql -e "alter table @ convert to charset utf8" dbname

Неактивен

 

#3 03.11.2009 17:42:07

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

Re: В базе со 100 таблицами смена сравнения SET COLLATE sql-запросом utf-8_unicode_ci

paulus написал:

В звездочке, разумеется. Нет команды «ALTER TABLE *». Можете написать
какой-то простой сценарий, который сделает это за Вас:

mysql -NBe "show tables" dbname | xargs -i@ mysql -e "alter table @ convert to charset utf8" dbname

на чем этот сценарий??

я написал на php, но он не работает

Код:

<?
//-----------подсоеденяем базу
$db=mysql_connect("localhost","dbase1","pass");
mysql_select_db("dbase1",$db);
if (!$db) echo "database is down";

//-------------делаем выборку таблиц
$res1=mysql_query("SELECT * FROM dbase1");

// ----------в цикле меняем нужную кодировку с подборкой
while ($myrow=mysql_fetch_array($res1));
{
$res2=mysql_query("ALTER TABLE '$myrow['TABLE']' DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci")
}

?>

Так возможно?? и почему нет выборки?

Отредактированно q3000 (03.11.2009 17:49:05)

Неактивен

 

#4 03.11.2009 19:28:37

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

Re: В базе со 100 таблицами смена сравнения SET COLLATE sql-запросом utf-8_unicode_ci

Проблему удалось решить с помощью Sypex Dumper Lite 1.0.8..
с выставленными внутри

Код:

define('CHARSET', 'auto');
define('RESTORE_CHARSET', 'forced->utf8_unicode_ci');

Перегоняем в дамп, а потом обратно

Неактивен

 

#5 03.11.2009 19:33:51

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

Re: В базе со 100 таблицами смена сравнения SET COLLATE sql-запросом utf-8_unicode_ci

Потому что $res1=mysql_query("SELECT * FROM dbase1"); означает выбрать все поля из таблицы `dbase1`. И вероятнее всего на этом этапе у вас происходит ошибка - такой таблицы не существует.
Рекомендую делать вывод ошибок
$res1=mysql_query("SELECT * FROM dbase1") or die(mysql_error());

Чтобы получить имена таблиц:
1. SELECT table_name FROM information_schema.`TABLES` T where table_schema='dbase1';  -- действует с пятой версии
или
2. show tables from dbase1;

Неактивен

 

Board footer

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