[MySQL 5.0] Inserten in tabel en auto increment

Pagina: 1
Acties:
  • 213 views sinds 30-01-2008
  • Reageer

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
Als ik in een tabel iets wil inserten, moet ik bij het opgeven van de ID, altijd een getal opgeven.
Terwijl auto increment 'aan' staat. :)

Ik mag er dan dus van uitgaan, dat MySQL lekker zelf de nieuwe ID bepaald, voor het nieuwe record.
Dit is echter niet het geval. Ook als ik de volgende query uitvoer, zie ik dat de last insterted id gewoon 0 is en 0 blijft... :?
SQL:
1
SELECT LAST_INSERT_ID() from `users`;
Het lijkt er dus op, dat die auto_Increment niet werkt... En ik snap niet wat er nou fout is aan de tabel, die overigens gemaakt is volgens de volgende SQL-code
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `users` (
  `id` tinyint(10) unsigned NOT NULL auto_increment,
  `smf_id` tinyint(10) unsigned NOT NULL,
  `nick` varchar(50) NOT NULL,
  `hexnick` varchar(50) NOT NULL,
  `ip` varchar(15) NOT NULL,
  `gate` int(11) NOT NULL,
  `gender` varchar(2) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `nick` (`nick`),
  UNIQUE KEY `hexnick` (`hexnick`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Zou het kunnen komen door de engine en de gebruikte charset? Want MySQL / PHPMyAdmin maakt standaard steeds een InnoDB aan als engine en ik geloof als charset UTF-8...
Ook als ik auto_increment=x toevoeg aan het einde van de query, werkt de auto increment niet...

Als ik via PHPMyAdmin iets in wil vullen en het ID veld leeg laat, ontstaat de volgende foutmelding (die dus eigenlijk niet zou moeten):
#1366 - Incorrect integer value: '' for column 'id' at row 1
Word er wél een waarde ingevult, dan werkt het wel? :?
Heb overigens ook hier al gezocht, kwam toen verscheidene topics tegen. In eentje kwam ik toen een suggestie tegen, waardoor ik er dus achter kwam, dat LAST_INSERT_ID() 0 is, terwijl er dus wél iets in de DB te vinden is.

Overigens ontstaat de foutmelding ook, als de tabel nog leeg is...

Kan wel met een omweg natuurlijk de geinserte ID berekenen, die dan weer met 1 optellen en die dan weer als ID invullen in de nieuwe record, maar lijkt mij dat het sneller is, als ik het aan MySQL zelf overlaat? :)

Wat ik overigens ook raar vind... Als ik bijvoorbeeld een tinyint heb op een veld, en een getal in vul die lager is dan de maximaal toegestane lengte, slikt ie dat ook niet, bijvoorbeeld bij de gate... :/

* CH4OS zou haast denken dat MySQL over de zeik is of zo... :?

[ Voor 31% gewijzigd door CH4OS op 30-07-2006 15:07 ]


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 20:01
Je moet zoiewo afstappen van tinyint, want een unsigned tinyint gaat maar tot het getal 255. Alles daarboven werkt dus niet. Maakt er maar gewoon een normale integer van.

Voor meer info zie daarover zie 11.1.1. Overview of Numeric Types

[ Voor 31% gewijzigd door Sybr_E-N op 30-07-2006 15:57 ]


  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Topicstarter
Sybr_E-N schreef op zondag 30 juli 2006 @ 15:55:
Je moet zoiewo afstappen van tinyint, want een unsigned tinyint gaat maar tot het getal 255. Alles daarboven werkt dus niet. Maakt er maar gewoon een normale integer van.
Ik zal het aanpassen en even testen... :)

Edit: heb de tinyint aangepast naar een int en de unsigned 'status' weggehaalt, moest zelfs de row id en smf_id verwijderen en opnieuw toevoegen, desondanks krijg ik nog de volgende foutmelding:
#1264 - Out of range value adjusted for column 'id' at row 1
Ik heb het gevonden wat het was. MySQL 5 draaide in strict mode, deze uitschakelen en het werkt.

Hoe strict mode uitzetten?
Open vanuit je MySQL map het bestand my.ini en zoek naar strict, comment deze en herstart je MySQL server. Als het goed is moet het nu werken! Bron: [rml]-NMe- in "[ MYSQL] error #1264"[/rml]

[ Voor 106% gewijzigd door CH4OS op 30-07-2006 17:58 ]


  • geenstijl
  • Registratie: Juli 2005
  • Niet online
Ik weet niet hoe je code eruit ziet, maar het kan ook zijn dat je code niet juist is.
Werkt onderstaande wel?

tabel (incrementid, testwaarde);
INSERT INTO tabel (testwaarde) VALUES ('waarde');

Dus indien je de "insert"-kolommen ook opgeeft?
Strict-mode uitschakelen lijkt mij niet erg handig ;) :
http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html