{"id":468,"date":"2011-01-09T19:16:45","date_gmt":"2011-01-09T18:16:45","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=468"},"modified":"2011-01-09T19:16:45","modified_gmt":"2011-01-09T18:16:45","slug":"1062-duplicate-entry-2147483647-for-key-primary","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/1062-duplicate-entry-2147483647-for-key-primary\/","title":{"rendered":"#1062 &#8211; Duplicate entry &#8218;2147483647&#8216; for key &#8218;PRIMARY&#8216;"},"content":{"rendered":"<p>Das war mal wieder grad mal wieder ein Fehler, wie er im Buche steht. Anwendung l\u00e4uft seit Jahren astrein, aber auf einmal frisst die Tabelle keine neuen Eintr\u00e4ge mehr. Als Entwickler sollte einem die Zahl <b>2147483647<\/b> ja bekannt vorkommen. Folgender Ablauf zum reproduzieren:<\/p>\n<pre data-enlighter-language=\"sql\" class=\"EnlighterJSRAW\">\r\nCREATE TABLE `produkt` \r\n(\r\n  `artikelnr` int(11) NOT NULL,\r\n  `preis` float NOT NULL,\r\n  PRIMARY KEY (`artikelnr`)\r\n);\r\n<\/pre>\n<p>Und der Inhalt:<\/p>\n<pre data-enlighter-language=\"sql\" class=\"EnlighterJSRAW\">\r\nINSERT INTO produkt (artikelnr, preis) VALUES (2147483647, 4.99);\r\nINSERT INTO produkt (artikelnr, preis) VALUES (2147483648, 6.95);\r\n<\/pre>\n<p>Das zweite insert-Statement liefert: <i>#1062 &#8211; Duplicate entry &#8218;2147483647&#8216; for key &#8218;PRIMARY&#8216;<\/i>. <\/p>\n<p><b>Simple Erkl\u00e4rung:<\/b> <\/p>\n<blockquote><p><a href=\"http:\/\/en.wikipedia.org\/wiki\/2147483647\">The number 2,147,483,647 is the maximum value for a 32-bit signed integer in computing.<\/a><\/p><\/blockquote>\n<p>Hei\u00dft: Beim Versuch, gr\u00f6\u00dfere Zahlen zu inserten, setzt MySQL stellvertretend daf\u00fcr die max-int-Zahl 2147483647 ein, was dann zu einem doppelten Primary Key f\u00fchrt. Abhilfe: Den Primary Key als unsigned kennzeichnen (max: 4294967295) oder einen BIGINT nehmen (max: 9223372036854775807). Wird der dann \u00fcberschritten, geht der Insert \u00fcbrigens nicht mehr &#8222;stillschweigend&#8220; mit reduzierter Zahl durch sondern liefert eine Warning: <\/p>\n<pre data-enlighter-language=\"enlighter\" class=\"EnlighterJSRAW\">Warning: #1264 Out of range value for column &#039;artikelnr&#039; at row 1<\/pre><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das war mal wieder grad mal wieder ein Fehler, wie er im Buche steht. Anwendung l\u00e4uft seit Jahren astrein, aber auf einmal frisst die Tabelle keine neuen Eintr\u00e4ge mehr. Als Entwickler sollte einem die Zahl 2147483647 ja bekannt vorkommen. Folgender &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/1062-duplicate-entry-2147483647-for-key-primary\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,3],"tags":[],"class_list":["post-468","post","type-post","status-publish","format-standard","hentry","category-datenbanken","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=468"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/468\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}