Avatar billede nemlig Professor
29. december 2018 - 14:57 Der er 7 kommentarer og
2 løsninger

Fejl når jeg opdaterer felt af typen decimal

Hejsa.
Jeg har haft et fungerende system i flere år, men pludselig får jeg fejl, når jeg vil gemme data i MySQL.
Det er givetvis mig, som har gjort det forkert, men hvor jeg tror serveren indtil for nylig var mere "eftergivende". Jeg tror, at webhotellet nu har opgraderet serversoftwaren, og så går det ikke længere.....

Jeg har et felt af typen decimal(10,1), Nlul=Yes og default = 0.0.

Når jeg opdaterer feltet uden værdi, så kommer nu denne fejl:

Incorrect decimal value:

Og det jo nok fordi værdien er tom og feltet i forvejen har en default værdi på 0.0.

Inden jeg går i gang med at rette programkoden, vil jeg være glad for lidt input, om jeg er på sporet.

Og løsningen er vel, at jeg laver et tjek på værdien, inden jeg opdaterer feltet, og er værdien tom, så skal jeg sætte værdien til 0.0.
Avatar billede erikjacobsen Ekspert
29. december 2018 - 15:56 #1
Det hedder "strict mode", og er diskuteret her: https://stackoverflow.com/questions/35037288/incorrect-decimal-integer-value-mysql

Men ja, prøv at undgå tomme strenge - er feltet tomt skal du vel lave det til Null, og ikke 0.0 ?
Avatar billede nemlig Professor
29. december 2018 - 16:04 #2
Tak Erik.

Hvis jeg sætter værdien til Null, og jeg opdaterer feltet, som i forvejen har værdien 0.0, hvilken værdi vil feltet efterfølgende have? Jeg gætter på Null.

Men er der overhovedet nogen idé i, at det skal være muligt at gemme værdien Null. Default er jo 0.0, og feltet bruges til forskellige beregninger?
Avatar billede erikjacobsen Ekspert
29. december 2018 - 16:27 #3
#2: Hvis du sætter Null ind, så overskriver den 0.0

Men hvis du ikke har noget at bruge Null til skal du vel definere feltet til ikke at tillade Null-værdier - bare for god ordens skyld.
Avatar billede nemlig Professor
29. december 2018 - 16:32 #4
#3 Nemlig, og hvis feltet er tomt,  så skal jeg vel også sætte værdien til 0.0, inden jeg opdaterer feltet?
Avatar billede erikjacobsen Ekspert
29. december 2018 - 16:39 #5
Hvis feltet er tomt, og det betyder værdien skal være 0.0, så skal du sætte det til 0.0.

Men hvad med at sørge for at feltet ikke kan være tomt: I GUI-en indsætter du som standardværdi 0.0?
Avatar billede nemlig Professor
29. december 2018 - 16:50 #6
God ide. Værdien kommer fra et input-felt. Dette felt sætter jeg default til 0, og når jeg validerer input, så sikrer jeg mig, at feltet har en nummerisk værdi.

Jeg skal til tasterne, for der er mange steder, det skal rettes.

Tusinde tak for dine input.
Avatar billede arne_v Ekspert
29. december 2018 - 22:06 #7
Logisk set saa er:

'' invalid
0.0 valid numerisk vaerdi
NULL valid manglende vaerdi

Og at der skal beregnes paa feltet er *ikke* en god grund til at bruge 0.0 fremfor NULL.

AVG af 100, 101, NULL er 100.5

AVG af 100,101, 0 er 67.0
Avatar billede nemlig Professor
29. december 2018 - 22:45 #8
#7 Interessant. Vil regnestykket, 100 + NULL give 100, og dermed ikke give fejl?
Avatar billede arne_v Ekspert
29. december 2018 - 23:05 #9
Nej. 100+NULL er NULL.

MIN, MAX, COUNT, SUM og AVG funktionerne ignorerer NULL.

Men ikke aritmeriske operatorer.

Hvis du vil ligge to kolonner sammen saa vil:

col1+col2

give NULL hvis col2 indeholder NULL mens

col1+IFNULL(col2, 0)

vil give col1 hvis col2 er NULL.
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
Computerworld tilbyder specialiserede kurser i database-management

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