From: | kdebisschop(at)alert(dot)infoplease(dot)com |
---|---|
To: | Jon Earle <je_pgsql(at)kronos(dot)honk(dot)org> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: Nulls get converted to 0 problem |
Date: | 2003-06-06 11:39:40 |
Message-ID: | 1054899579.1182.30.camel@miles.debisschop.net |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Thu, 2003-06-05 at 09:39, Jon Earle wrote:
> On Wed, 4 Jun 2003 terry(at)ashtonwoodshomes(dot)com wrote:
>
> > Oracle *incorrectly* interprets blank (empty) strings as NULL. They are NOT
> > the same. A string of zero characters is a string nonetheless. A NULL is
> > "the absence of value", which equals nothing (theoretically not even another
> > NULL).
>
> If you're testing a value, you're testing to see if there's something in
> there or not - what difference does it make if the variable contains 0, ""
> or NULL?
>
> Why not adhere to the practices inherent (and thus anticipated by
> developers) in other languages (C comes to mind) where 0, NULL and "" are
> equivalent?
Perhaps because the SQL Spec says they are different?
For that matter, a zero length string in C is not the same as NULL.
Believing otherwise may be convenient, but leads to segfaults
i.e., this code will cause a segfault
main(...) {
char *str;
if (str == NULL)
printf ("This test is safe\n");
if (str == "")
printf ("This comparison above can segfault on some systems\n");
printf ("printing a NULL string like %s can also segfault\n", str);
}
I believe in C the following is true as well:
main() {
char *str="";
if (str)
printf ("An empty string evaluates as true");
}
--
Karl DeBisschop <kdebisschop(at)alert(dot)infoplease(dot)com>
From | Date | Subject | |
---|---|---|---|
Next Message | Bruno Wolff III | 2003-06-06 12:21:53 | Re: EXTERN JOIN with WHEN query |
Previous Message | terry | 2003-06-06 11:28:29 | Re: Nulls get converted to 0 problem |