Avatar billede jogii Nybegynder
19. februar 2012 - 16:58 Der er 2 kommentarer og
1 løsning

Kald til Stored Procedure med dato parameter sat til '' fejler med "Error Code: 1292. Incorrect datetime value"

Manualen siger

"Illegal DATE, DATETIME, or TIMESTAMP values are converted to the "zero" value of the appropriate type ('0000-00-00' or '0000-00-00 00:00:00')."

Jeg har lavet SP'er imod en MySQL 5.0 server, og der virker det fint når jeg kalder en procedure med blank værdi for en DATETIME variabel.

Jeg bemærkede dog, at hvis jeg kalder en SP fra en anden SP, så vil den ikke acceptere '' (blank) og fejler.

Nu installerede jeg min egen server (5.5) lokalt, og her giver den fejl når jeg kalder samme SP fra konsollen.

Når jeg angiver NULL som variabel, fejler den ikke.


Inde i min SP anvender jeg følgende kode for at tildele passende default-værdi:

IF ISNULL(TO_DAYS(tidspunkt)) THEN
    -- SET fra = Now();
    SET tidspunkt = '1000-01-01 00:02:00';
END IF;

Denne kode kan normalt både håndtere NULL og '0000-00-00 00:00:00' (som jo er "fejl"-værdien)

Så mit spørgsmål går ud på:
1. Er det "ok" at kalde en SP med '' (blank) i variablen
2. Findes der en server-indstilling, som tillader "fejl"-datoer i SP'kald, som så kan omsættes til '0000-00-00' ?
Avatar billede gnoname Praktikant
24. februar 2012 - 00:20 #1
MySql er blevet mere striks efter version 5.0 angående "illegal date" værdier.

Du bør nok ændre dit check til følgende:

IF (tidspunkt = '' OR ISNULL(TO_DAYS(tidspunkt))) THEN
    -- SET fra = Now();
    SET tidspunkt = '1000-01-01 00:02:00';
END IF;

Ellers må du kalde din SP med NULL (eller '1000-01-01 00:02:00') i stedet for med blank (''); for '' er jo ikke lig NULL.
Avatar billede jogii Nybegynder
04. marts 2012 - 04:09 #2
Kan det have noget med denne her at gøre?`
http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_no_zero_date

Jeg er godt klar over, at jeg kan kalde med Null og hardkodede tekststrenge. Jeg overvejede bare alternativerne, og undrede mig over at der var forskel på de forskellige serverinstansers opførsel.

Vi har droppet "" som valgmulighed, og anvender kun NULL nu.

Smid et svar, så får du point.
Avatar billede gnoname Praktikant
04. marts 2012 - 17:18 #3
Det er som sagt fordi MySql er blevet mere striks, at den nyere server software opfører sig anderledes.
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