Open up MySQL and run this: SELECT 'foobar' = 0;
It turns up as "1" (MySQL 4.0.1-alpha). Now, the reason is fairly obvious: atof("foobar") is 0. I tried similar SELECT's in MSSQL and Postgres, and neither said 'foobar' = 0 was true. In my humble opinion, it isn't. But I don't have any standards in front of me, nor do I know how to get them... Below is a patch to sql/item.h that fixes this problem. It works for me, but I haven't tested it very extensively. Is this a valid problem? I'm basically relying on intuition alone here... Adam Hooper [EMAIL PROTECTED] [adam@hera sql]$ diff item.h item.h-new -C 3 *** item.h Mon May 27 21:09:27 2002 --- item.h-new Mon May 27 21:09:16 2002 *************** *** 257,265 **** --- 257,290 ---- } ~Item_string() {} enum Type type() const { return STRING_ITEM; } + + /* double val() { return atof(str_value.ptr()); } longlong val_int() { return strtoll(str_value.ptr(),(char**) 0,10); } String *val_str(String*) { return (String*) &str_value; } + */ + + double val() { + char *s; + char *e; + double result; + + result = strtod( s = (char *) str_value.ptr(), &e ); + null_value = s == e; + return result; + } + longlong val_int() + { + char *s; + char *e; + longlong result; + + result = strtoll( s = (char *) str_value.ptr(), &e, 10 ); + null_value = s == e; + return result; + } + String *val_str(String*) { null_value = 0; return (String*) &str_value; } + bool save_in_field(Field *field); void make_field(Send_field *field); enum Item_result result_type () const { return STRING_RESULT; } [adam@hera sql]$ --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php