It's been my experience that the DBD will attempt to convert (mangle?) the DTS when attempting an insert in Informix if the formats are not defined in exactly the same format, for example if the field is defined in the table as 'year to second' vs. 'year to fraction' it will still accept, but YMMV.
I've been able to get past some of these pitfalls by
- 1) checking the field format via dbaccess, and making sure my discrete values are valid for that field definition, or
- 2) doing an insert using the Informix keyword CURRENT
eg. 'INSERT INTO foo_table (field1,field2) VALUES (?, CURRENT)
Note that the current time on the host running perl might not be the db servers current time. We run everything UTC so sometimes I forget others dont.
I've also had success selecting from the database using EXTEND(field2, year to second).
While I know that extending the field doesn't help your question, it has saved me a lot of regexes when selecting elements of the DTS from the db.
Onward!
| [reply] |
At a guess that is a bug at the C level in
DBD::Informix.
One reason why the quotes could make a difference is that
you are forcing the internal representation of the scalar
into string form, and so the driver might wind up using a
different conversion function on the number. | [reply] |