Двойная запись при выполнении вставки в MySQL из Perl - PullRequest
0 голосов
/ 23 мая 2011

Я делаю вставку в MySQL DB из Perl. Я получаю повторяющуюся ошибку после 1-й вставки. Вот код, который я использую для вставки. Я получаю идентификатор из ответа JSON. у меня есть вывод того, что я получаю ниже кода

  foreach my $listing(@{$json_text->{listings}})
    {
      my $id = $listing->{id};
   print "\nid = $id \n";


    # DO THE INSERT
    my $query_insert = "INSERT INTO calendar (id) VALUES ($id)";
    print "query insert = $query_insert \n";
    my $query = $db->do($query_insert); 
   print "query = $query \n";

    } #end foreach

вот вывод, который я получаю. (Возвраты не копируются правильно. Таким образом, приведенное ниже выглядит неверно, но правильные данные есть). это как 133 мой $ query = $ db-> do ($ query_insert);

id = 2576246314 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576246314) запрос = 1

id = 2576246678 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576246678) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576246781 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576246781) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576247610 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576247610) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576247737 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576247737) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576247756 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576247756) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576247766 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576247766) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576248369 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576248369) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576248388 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576248388) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576248660 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576248660) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576249706 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576249706) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

id = 2576250254 вставка запроса = INSERT INTO календарь (id) ЗНАЧЕНИЯ (2576250254) Не удалось выполнить DBD :: mysql :: db: Дублирующая запись '2147483647' для ключа 'PRIMARY' в строке ./calendar_run.pl 133. запрос =

Ответы [ 2 ]

7 голосов
/ 23 мая 2011

Похоже, тип для ID слишком короткий.Это значение (2147683647) является максимальным 32-разрядным целочисленным значением со знаком.Попробуйте использовать больший размер для идентификатора.

0 голосов
/ 19 апреля 2013

Я получил ту же ошибку, используя DBD :: MySQL. Вот что я обнаружил: «Perl сохраняет возвращаемые значения в виде строк, но автоматически преобразует их в числа, когда вы используете значения в числовом контексте. Это приведет к их усечению до 2147483647, поскольку Perl использует значение LONG со знаком для хранить такие номера. " (здесь: http://www.tol.it/doc/MySQL/chapter7.html). Но я не нашел общедоступной ошибки для этого.

...