【问题标题】:Haskell HDBC-Sqlite3 always returns SqlByteString valuesHaskell HDBC-Sqlite3 总是返回 SqlByteString 值
【发布时间】:2011-03-06 17:40:08
【问题描述】:

我正在使用 HDBC sqlite3 haskell 驱动程序访问本地 sqlite3 数据库

PRAGMA encoding

UTF-8

结果,例如对于

SELECT id, title FROM some_table

我总是得到这样的结果:

[[SqlByteString "1", SqlByteString "\210\129\123\211"], ... ]

这很奇怪! 是的,标题包含“国家”符号,是的,我确定 id 的类型为 INTEGER

所以问题是:

  1. 为什么 1 个 unicode 符号被威胁为 2 个类似 ascii 的符号?
  2. 为什么整数列会产生字节串值?

【问题讨论】:

    标签: haskell sqlite hdbc


    【解决方案1】:

    SQLite 是一个无类型数据库,因此数据库中的字段根本没有类型。您应该使用 fromSqlDatabase.HDBC.SqlValue 中的 safeFromSql 将它们转换为更 Haskellish 的值。

    【讨论】:

    • 但是在“Real World Haskell”一书 (book.realworldhaskell.org/read/using-databases.html) 中,他们在第 21 章使用 sqlite3 引擎,并且他们的示例确实返回了正确的(如 SqlInt 或 SqlString)值。为什么?
    • 他们的示例返回 SqlStringSqlNull 但不是 SqlInt --- 更仔细地查看返回的内容(SqlString "0" 等)。我认为实现在某些时候已经更改为使用SqlByteString 而不是SqlString,我不知道为什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多