SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 29.10.2013 12:19:44

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

Duplicate entry error

Никак не могу решить проблему с Duplicate entry. Перед вставкой делаю проверку по этому полю.
Если нет такой записи то вставляю.
И получаю Duplicate entry.
Движек БД innodb.

В чем еще может быть проблема? И как вообще такое может быть. Ведь перед вставкой проверяю.

Неактивен

 

#2 29.10.2013 12:54:03

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Duplicate entry error

Покажите show create table таблицы и sql-запрос, который вставляет запись.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 29.10.2013 13:42:33

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

Re: Duplicate entry error

CREATE TABLE `songs` (
    `id` CHAR(32) NOT NULL,
    `artist_id` CHAR(32) NOT NULL,
    `title` VARCHAR(150) NOT NULL,
    `size` DOUBLE(7,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT 'Kb size',
    `bitrate` SMALLINT(3) UNSIGNED NOT NULL DEFAULT '0',
    `duration` VARCHAR(8) NOT NULL DEFAULT '00:00:00',
    `added` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `server` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1',
    `status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '3',
    `ban` TINYINT(1) UNSIGNED NULL DEFAULT '0',
    PRIMARY KEY (`id`),
    INDEX `title` (`title`),
    INDEX `added` (`added`),
    INDEX `artist_id` (`artist_id`),
    INDEX `status` (`status`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
 


INSERT INTO `songs` (`id`, `artist_id`, `title`, `duration`) VALUES ('73765d8827038c1dc361044dd1c3cb4b', '5004611096bffd3d1440cfdd99c477dc', 'Zero Song', '08:59');

Неактивен

 

#4 29.10.2013 16:19:55

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Duplicate entry error

Там проблема может быть в том, что не вмещается хеш в поле ID.
Попробуй увеличить длину поля ID с 32 до 64.

Объяснить не могу, потому-что до конца с этой проблемой не разбирался.
У тебя есть две записи, у которых начальные символы хеша совпадают.
При вставке хеш рубится до какого-то символа и получается, что два хеша одинаковы.

Например, ты хочешь вставить id = 123456789zzz, и в БД уже есть запись, где id = 123456789xxx, который при вставке обрубился до 123456789 из-за недостаточной длины поля.
При проверке, ты проверяешь 123456789zzz, запись не находится. Но при вставке новый id обрубается до 123456789 и получается, что такой id уже есть.

Отредактированно Александр Трофимов (29.10.2013 17:28:39)

Неактивен

 

#5 29.10.2013 17:38:44

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

Re: Duplicate entry error

Там проблема может быть в том, что не вмещается хеш в поле ID.
Попробуй увеличить длину поля ID с 32 до 64.

Но у меня char 32 установлен и хеш md5() 32 длинна.

Неактивен

 

#6 29.10.2013 17:46:06

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Duplicate entry error

Просто попробуй, думать, почему так, будешь потом.

Неактивен

 

Board footer

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