Thanks very much Paul. My day has just improved. 

On Fri, 2004-12-03 at 16:53, Paul DuBois wrote:
> At 16:34 -0800 12/3/04, Mark Maunder wrote:
> >It looks like when mysql coerces character strings into integers, it
> >turns them into signed int's. Obviously if the column is unsigned, this
> >is a problem. Don't use quotes you say. Problem is that the perl DBI API
> >seems to put quotes around everything. So when I grab a really really
> >large integer from the db using the perl api, and then try to get a
> >child record referencing the same large integer ID, the DB doesn't give
> >me anything because it's coercing a large chunk of text into a signed
> >integer and truncating it.
> 
> You don't indicate when it is that DBI is putting "quotes around
> everything", but if what you mean is that values bound to placeholders
> get quoted, you can suppress that.  perldoc DBI shows this information:
> 
>         Data Types for Placeholders
> 
>         The "\%attr" parameter can be used to hint at the data type the
>         placeholder should have. Typically, the driver is only interested
>         in knowing if the placeholder should be bound as a number or a
>         string.
>        
>           $sth->bind_param(1, $value, { TYPE => SQL_INTEGER });
> 
>         As a short-cut for the common case, the data type can be passed
>         directly, in place of the "\%attr" hash reference. This example is
>         equivalent to the one above:
>        
>           $sth->bind_param(1, $value, SQL_INTEGER);
>        
>         The "TYPE" value indicates the standard (non-driver-specific) type
>         for this parameter. To specify the driver-specific type, the driver
>         may support a driver-specific attribute, such as "{ ora_type => 97
>         }".
>          
>         The SQL_INTEGER and other related constants can be imported using
>                   use DBI qw(:sql_types);
> 
>         See "DBI Constants" for more information.
> 
> 
> >
> >Another not-really-a-bug but definitely a pitfall. And it sucks because
> >after not being able to use md5 hashes to index my records using
> >BINARY(16) because binary isn't really binary because it cuts off
> >spaces, I'm losing a digit of my next-best-thing thanks to unsigned
> >integers which are actually signed.
> >
> >Don't make me go spend my life savings on Oracle!
> >
> >Here's an example in case you're really bored. The problem below exists
> >because 9358082631434058695 > 2^63
> >
> >##First with no quotes around the large integer:
> >mysql> select job_id from wordbarrel_9a where
> >job_id=9358082631434058695;
> >+---------------------+
> >| job_id              |
> >+---------------------+
> >| 9358082631434058695 |
> >+---------------------+
> >1 row in set (0.00 sec)
> >
> >##Then with quotes:
> >mysql> select job_id from wordbarrel_9a where
> >job_id='9358082631434058695';
> >Empty set (0.00 sec)
> >
> >mysql> desc wordbarrel_9a;
> >+----------+---------------------+------+-----+---------+-------+
> >| Field    | Type                | Null | Key | Default | Extra |
> >+----------+---------------------+------+-----+---------+-------+
> >| job_id   | bigint(20) unsigned |      | PRI | 0       |       |
> >+----------+---------------------+------+-----+---------+-------+
-- 
Mark D. Maunder <[EMAIL PROTECTED]>
http://www.workzoo.com/
"The Best jobs from the Best Job Sites."


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to