04. marts 2004 - 11:17Der 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!!!
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.
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)
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.
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?
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.
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...
Æ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.
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.