Avatar billede mrjowns Novice
04. marts 2004 - 11:17 Der er 17 kommentarer og
1 løsning

MySQL ændrer data ved insert

Jeg synes det er en meget underlig fejl, som garanteret har en simpel løsning.

På min side har jeg en simpel formular hvor en bruger indtaster sine data og efter submit laver jeg en helt almindelig UPDATE.

I et feltet "bankkon" skriver jeg f.eks. tallet: 8128346806

, så prøver jeg, for en sikkerhedsskyld at skrive SQL-sætningen ud inden den sætter dataen ind i databasen:

UPDATE bruger SET password = 'xxx', postnummer = 'xxx', telefon = '0', mobil = 'xxx', prtlf = 'xxx', cprfor = 'xxx', cprbag = 'xxx', bankreg = 'xxx', bankkon = '8128346806' WHERE id = '4'

Det viser med alt tydelighed, at sql-sætningen indsætter de rigtige data til MySQL-databasen.
Når jeg så går i databasen og kigger, ved hjælp af min administrationsværktøj eller skriver data ud, er bankkon lavet om til dette tal: 2147483647

Feltet "bankkon" har i databasen følgende properties:
Feltnavn: bankkon
Datatype: int(10)
Attributter:
Nulværdi: Ja
Standardværdi: 0
Ekstra:

Så har I alle oplysningerne. Jeg kan simpelthen ikke se hvad det er der går galt - håber I kan hjælpe!!!
Avatar billede fet321 Nybegynder
04. marts 2004 - 11:19 #1
Det er noget med typen på feltet bankkon
Avatar billede mrjowns Novice
04. marts 2004 - 11:20 #2
Hvad mener du? Det er en helt almindelig int...
Avatar billede fet321 Nybegynder
04. marts 2004 - 11:22 #3
Det er fordi feltet er INTEGER

"MySQL Field Types

INT or INTEGER
A normal-size integer
The signed range is ?2147483648 to 2147483647. The unsigned range is 0 to 4294967295"

Du kunne ændre feltet til varchar - eller hvis det skal være integer - BIGINT.

"BIGINT
A large integer
The signed range is ?9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615"
Avatar billede fet321 Nybegynder
04. marts 2004 - 11:23 #4
Eller skrevet lidt tydeligere:

Et INTEGER felt kan ikke have en værdi større end 2147483647.
Avatar billede mrjowns Novice
04. marts 2004 - 11:27 #5
Ja, du har selvfølgelig ret, dog...

Nu har jeg lavet feltet om til BIGINT og så bliver værdien: -461587786
Avatar billede mrjowns Novice
04. marts 2004 - 11:29 #6
fet321 - tænk ikke mere over det. Jeg har taget den nemme løsning og lavet det til VARCHAR istedet. Mange tak for hjælpen - pointene er dine...
Avatar billede fet321 Nybegynder
04. marts 2004 - 11:30 #7
Takker.
Avatar billede muddi Praktikant
04. marts 2004 - 11:31 #8
Lad være med at bruge BIGINT til sådan et felt. Du ved jo at et kontonummer ALTID har 10 cifre, så derfor ville det være smartere at bruge VARCHAR(10).
Du har ikke brug for de muligheder det giver at bruge BIGINT. Det jeg mener er, at du næppe vil bruge SUM() AVG() og lignende funktioner på dine kontonumre.

/Morten
Avatar billede mrjowns Novice
04. marts 2004 - 11:35 #9
Tak Morten! Nej, kontonumre er vel ikke på mere end 10 cifre (for de kan jo godt have færre) og nej, kan ikke lige få øje på formålet ved at finde et gennemsnit af x antal kontonumre! ;o)

Tak!
Avatar billede muddi Praktikant
04. marts 2004 - 11:43 #10
mrjowns >> Det gør også din database smidigere, hvis du laver den på den måde. BIGINT er godt til tal der skal beregnes, eller tal med variabel længde, men et kontonummer bør ligesom et cpr nummer ikke gemmes som et tal, men som en streng. Det samme gælder i øvrigt postnumre.
Avatar billede mrjowns Novice
04. marts 2004 - 11:46 #11
Hmmm, hvad er grunden til dette? Hverken et postnummer, cpr.nummer eller telefonnummer vil, hvis dansk, nogensinde komme op over den tilladte grænse for værdien på en INT. Så der er vel ikke nogen problemer i, at jeg allerede har gemt dem sådan, vel?
Avatar billede muddi Praktikant
04. marts 2004 - 11:50 #12
Nej, det kan selvfølgelig godt gå an. Men hvis du en dag skal lave et nyt system, så husk det. Det er jo ikke tal som vi normalt kender dem. Netop fordi vi ikke adderer to postnumre eller to telefonnumre.
Point, alder, antal børn osv. kan gemmes i numeriske felter, mens tal der kan betragtes som strenge bør gemmes i varchar felter.
Avatar billede mrjowns Novice
04. marts 2004 - 11:54 #13
Nu er jeg lidt newbie - men kan man, når feltet så er VARCHAR, sammenlignes med almindelige tal eller skal de så først laves om til tal? F.eks. IF int(rs("bankkon")) = 1234567890...
Avatar billede muddi Praktikant
04. marts 2004 - 11:59 #14
Ærligt talt, så ved jeg ikke ret meget om ASP. Har kun forstand på det der har med MySQL at gøre. Jeg ved det kan lade sig gøre i PHP så jeg vil tro at det også er muligt i ASP.
Avatar billede mrjowns Novice
04. marts 2004 - 12:00 #15
Okay, mange tak for dine tips Morten!!! :o)
Avatar billede muddi Praktikant
04. marts 2004 - 12:10 #16
Det var så lidt :o)
Avatar billede fet321 Nybegynder
04. marts 2004 - 22:48 #17
muddi >> sig til hvis du vil have halvdelen af præmien?
Avatar billede muddi Praktikant
05. marts 2004 - 09:38 #18
Nej, det gør ikke noget :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester