0
Другие записи за это число:
2011/03/19_1 - Кстати про MySQL давно хотел спросить
<< предыдущая заметкаследующая заметка >>
19 марта 2011
таинственная хуйня MySQL

UPD: Вопрос решен, всем спасибо, последовал вашим советам:

Вытянул из структуры таблицы все поля:
preg_match_all("/\n\s*`([^`]+)`/si",$s,$m); $s='`'.implode('`,`',$m[1]).'`';

Получается типа такого: `Date`,`Header`,`Body`,`Access`,`DateUpdate`,`view_counter`,`num`,`DateDatetime`,`DateDate`,`opt`

И команду вставки оборудую именно этими подробностями:

msq("INSERT INTO `$table2` ($s) SELECT $s FROM `$table`");

БЫЛО:

Ситуация. Есть некая таблица. Создается такая же по структуре, чтобы скопировать. Полный код операции:

DROP TABLE IF EXISTS `ss1`;

CREATE TABLE IF NOT EXISTS `ss1` (
`Date` varchar(128) NOT NULL,
`Header` varchar(255) NOT NULL default '',
`Body` mediumtext NOT NULL COMMENT 'Текст заметки (до 16М)',
`Access` enum('all','podzamok','admin') NOT NULL,
`DateDatetime` int(11) NOT NULL default '0',
`DateDate` int(11) NOT NULL default '0',
`DateUpdate` int(10) unsigned NOT NULL default '0',
`num` int(10) unsigned NOT NULL auto_increment,
`view_counter` int(10) unsigned NOT NULL default '0',

`opt` text NOT NULL,
UNIQUE KEY `num` (`num`),
KEY `Date` (`Date`),
KEY `Access` (`Access`),
KEY `DateDatetime` (`DateDatetime`),
KEY `DateDate` (`DateDate`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Заметки блога' AUTO_INCREMENT=1 ;

INSERT INTO `ss1` SELECT * FROM `dnevnik_zapisi`;

Копирует примерно половину записей (140 из 212) и выдает ошибку:
#1062 — Duplicate entry '1281643201' for key 1

Теперь берем ту же команду, но строки, что я выделил зеленым, заменяем на ТОЧНО ТАКИЕ ЖЕ, ТОЛЬКО ПЕРЕЧИСЛЕННЫЕ В ДРУГОМ ПОРЯДКЕ:

`DateUpdate` int(10) unsigned NOT NULL default '0',
`view_counter` int(10) unsigned NOT NULL default '0',
`num` int(10) unsigned NOT NULL auto_increment,
`DateDatetime` int(11) NOT NULL default '0',
`DateDate` int(11) NOT NULL default '0',

Все прекрасно копирует.

Скажите, это вообще как понимать? Следует сюда добавить, что значение Duplicate entry '1281643201' в копируемой таблице встречается только в одной записи в поле `DateDatetime`.

Вопрос, почему у меня названы так переменные и зачем они мне вообще, не являются в данной ситуации важными для понимания, чем объясняется глюк MySQL.

У вас есть объяснение феномену?
Что, MySQL копирует таблицу командой «INSERT INTO xxx SELECT * FROM» как слепая лошадь — не глядя на имена полей, просто по порядку?

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий


Include not found: `/home/www/lleo.me/blog/template/_reklamnaya_lirica.htm`