我尝试使用Haskell(版本6.10.3)和HDBC连接到MySQL数据库。我选择用Haskell ODBC来实现。我用cabal安装了HDBC(2.1.1)和HDBC-ODBC(2.1.0.0)。我已经下载并安装了MySQL ODBC驱动程序(5.1.5)。我用macports安装unixODBC(2.2.14_1)。所有这些都是在macosx(10.5.8)上实现的。
“#将mysql驱动程序添加到odbcinst.ini文件文件(在$ODBC\u HOME/etc/下)和$HOME/中的数据源。odbc.ini文件."
unixODBC的macports版本似乎将所有内容安装在/opt/local/下。我把一个odbcinst.ini文件在/opt/local/etc/中创建了一个。odbc.ini文件用户ID和密码与我的主目录中的用户名和密码类似:
[ODBC Data Sources]
myodbc = MySQL ODBC 5.1 Driver
[ODBC]
Trace = 0
TraceAutoStop = 0
TraceFile =
TraceLibrary =
[myodbc]
Driver = /usr/local/lib/libmyodbc5.so
DATABASE = [hidden]
DESCRIPTION = [hidden]
SERVER = localhost
PORT = 3306
UID = [hidden]
PWD = [hidden]
PASSWORD = [hidden]
USER = [hidden]
import Database.HDBC.ODBC
import Database.HDBC
import System
main = do
args
c
tables
mapM_ putStrLn $ tables
当我尝试一个DSN为“DSN=myodbc”时,它的错误是:
Database: SqlError
{seState = "[\"HY000\"]",
seNativeError = -1,
seErrorMsg = "connectODBC/sqlDriverConnect:
[\"1045: [unixODBC][MySQL][ODBC 5.1 Driver]Access
denied for user 'jamie'@'localhost' (using password: YES)\"]"}
但是,当我尝试使用“DSN=myodbc;UID=[hidden];PWD=[hidden]”的DSN时,它会列出数据库中的所有表。