雖然ThisSuitlsBlackNot幾乎是正確的,但他的答案有一些重要的遺漏。作爲大多數StrictlyTyped和DiscardString屬性的作者,我可以告訴你,實際上,在這種情況下DiscardString屬性更重要。
DBI將嘗試將您的數據轉換爲指定的類型,如果失敗,您的數據將被單獨保留並且不會生成錯誤。如果轉換失敗並指定了StrictlyTyped,則會生成錯誤。
DiscardString屬性拋棄數據的字符串部分(pv)將被丟棄。當使用JSON :: XS和其他JSON模塊時,這尤其重要,因爲JSON :: XS專門查看PV。
所以真的,你應該至少做:
$sth->bind_col(1, undef, {TYPE => SQL_INTEGER, DiscardString => 1});
注數的DBD居然不搭理在bind_col綁定類型。 DBD :: ODBC確實是因爲我維護它。 DBD :: Oracle通常不會關注TYPE,除非與StrictlyTyped和/或DiscardString一起使用(因爲我已經爲完全相同的問題添加了該功能)。
無論是駕駛員通過搜索使用的sql_type_cast代碼支持這些屬性或不僅能真正被確定(除非文檔是這麼說的),以及它們的XS等同sql_type_cast_svpv等我不相信DBD :: PG支持StrictlyTyped或DiscardString;實際上我相信在這個時候只有DBD :: ODBC和DBD :: Oracle(正如我添加它們那樣)。
您可能還會發現this有趣。
+1很好的答案。 – friedo