Problém s MySQL --> Duplicate entry '127' for key 1
4 příspěvky
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Dobrý den, mám velký problém s databází. Normálně jsem přidával příspěvky do mého systému, když se to zastavilo u id(auto_increment, primary_key) 127. Založil jsem si novou databázi, znova jsem udělal tabulku, nic. Vždy ta samá chyba: Duplicate entry '127' for key 1 Opravdu už nevím co s tím. A navíc, když jsem zálohoval tabulku, než jsem si smazal, všechny háčky v příspěvcích se mi hodili do otazníku v karu. :( Ví někdo, co s tím? Můžu připojit i strukturu, jestli Vám to pomůže. Díky
-
CREATE TABLE `threads` ( `quest` tinyint(5) NOT NULL, `text` text collate latin2_czech_cs NOT NULL, `datum` datetime NOT NULL, `autor` varchar(50) collate latin2_czech_cs NOT NULL, `sepot` tinytext collate latin2_czech_cs NOT NULL, `ohodnoceni` tinyint(3) NOT NULL, `id` tinyint(5) NOT NULL auto_increment, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=128 DEFAULT CHARSET=latin2 COLLATE=latin2_czech_cs PACK_KEYS=0 AUTO_INCREMENT=128 ;
-
Strukturu ani nepotřebuji, pač jsem to poznal už z tvého popisu. Ale když jsi tu strukturu dodal, tak se má teorie jen potvrdila. Zvolil jsi špatný datový typ u sloupce id. Každý datový typ není nekonečný a mají svá omezení. Typ tinyint má rozsah pouze 8 bitů (do 255). Ale jelikož není definován unsigned, pak je rozsah pouze do 127. Víc to nevezme. Tudíž ve tvém případě auto_increment končí na čísle 127 a při pokusu o další vložení se snaží uložit záznam s id 127. Ten už ale v databázi existuje, a tak zahlásí onu chybu "Duplicate entry '127' for key 1". Řešení je jednoduché. Zvolit typ s delším rozsahem. Běžně se používá klasický typ - int. Ten má rozsah až do 2147483647 (v unsigned až 4294967295). A k tomu doplňujícímu dotazu. Aby databáze správně pracovala s kódováním, tak se musí také správně nastavit. Nestačí jen definovat kódování u řetězových typů. Musíš také říci, že takové kódování chceš použít. A to se provádí tak, že před jakýmkoli volání SQL, nejlépe hned po připojení a nastavení databáze, zavoláš SQL: SET NAMES latin2 COLLATE latin2_czech_cs; Ovšem pozor. Vstupní řetězec musí také odpovídat danému kódování, jinak se uloží slátanina.
-
Ano. Ten problém s id jsem uvedomi uz vcera, i tak mnohokrát děkuji. ;) A tu radu s kódováním hned na pc vyzkouším :) diky moc