首先,我是一名 Haskell 新手,在第一个真正的“Haskell 项目”中使用 Haskell 取得了巨大飞跃。简而言之,它是关于从不同的数据源收集模式信息。
我决定将 HDBC 与 ODBC 一起使用,但我遇到了这个意外的异常。重现:
import Database.HDBC
import Database.HDBC.ODBC
main :: IO ()
main = do
ioc <- connectODBC "Driver={MySQL};Port=3306;Database=northwind;User=root;Host=localhost"
x <- describeTable ioc "Categories"
putStrLn $ show (x !! 3)
执行时发生此异常:
$ runghc problem-hdbc.hs
problem-hdbc.hs: Convertible: error converting source data -1 of type Int32 to type Word64: Input value outside of bounds: (0,18446744073709551615)
相关数据库是 Microsoft 的示例数据库Northwind。表中第三列的Categories
类型为longblob
。
我可以看到那show
是打印colSize
,它是类型的Maybe Int
。我不明白为什么 ODBC 更喜欢抛出异常而不是返回Nothing
colSize。
这让我想到了几个问题:
- 这是一个错误吗?
- 如果没有,我该怎么做才能解决这个问题?
- 使用 时的最佳实践是什么
Convertible
?