Thanks for the suggestions. DRH's workaround, while it would work, seems very ugly.
I would be interested to know what version of DBD::SQLite Puneet Kishor is using, since I believe I have tracked the issue to a test in the sqlite_st_execute() function in dbdimp.c : else if (looks_like_number(value)) { /* bind ordinary numbers as numbers - otherwise we might sort wrong */ retval = sqlite3_bind_double(imp_sth->stmt, i+1, SvNV(value)); } This test appears in all the versions of DBD::SQLite that I can find and appears to be what causes the text to be treated as a number. Does this check actually perform any useful function (as per the comment) or will it be safe to delete it? Another workaround would be for the "do" of Perl's DBI: $rv = $dbh->do($statement, \%attr, @bind_values); to be exteneded in some way to allow bind_types to be passed in. One could use a prepare, bind_param, execute sequence, but that would seem to defeat the point of having the do() shortcut in the first place. -jonathan -- Jonathan H N Chin, 2 dan | deputy computer | Newton Institute, Cambridge, UK <[EMAIL PROTECTED]> | systems mangler | tel/fax: +44 1223 767091/330508 "respondeo etsi mutabor" --Rosenstock-Huessy