我正在尝试使用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)。所有这一切都在Mac OS X(10.5.8)之上。
我大部分时间都在使用此页http://en.wikibooks.org/wiki/Haskell/Database上的说明。在这一点上:
“#将mysql驱动程序添加到odbcinst.ini文件(在$ ODBC_HOME / etc /下),并将数据源添加到$ HOME / .odbc.ini中。”
看起来unixODBC的macports版本安装在/ opt / local /下的所有内容。我把odbcinst.ini放到了/ opt / local / etc /中,我在我的主目录中创建了一个.odbc.ini,看起来像这样(注意我已经尝试过UID与USERNAME和PWD vs密码):
[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]
我编写并编译了这个Haskell程序:
import Database.HDBC.ODBC import Database.HDBC import System main = do args <- getArgs c <- connectODBC (args!!0) tables <- getTables c mapM_ putStrLn $ tables
当我尝试使用“DSN = myodbc”的DSN时,错误输出:
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“DSN = myodbc; UID = [hidden]; PWD = [hidden]”时,它会列出数据库中的所有表。
答案 0 :(得分:1)
这可能是unixODBC问题,而不是Haskell / HDBC / HDBC-ODBC问题。运行“isql myodbc”会导致“总线错误”。运行“isql -v myodbc”不会提供任何更多信息。运行isql [uid] [pwd]连接就好了。
答案 1 :(得分:0)
iODBC由my employer维护和支持,自Jaguar(10.2.x)起作为Mac OS X的一部分发布。
你会更好地离开updating iODBC with all the latest patches(Apple往往会落后于这些),而不是转向UnixODBC。
通常最好将所有ODBC配置保留在Mac OS X的默认文件位置 -
/Library/ODBC/odbc.ini
/Library/ODBC/odbcinst.ini
/Users/*/Library/ODBC/odbc.ini
/Users/*/Library/ODBC/odbcinst.ini
您可以从您可能想要拥有这些文件的任何其他位置创建符号链接,例如 -
ln -s ~/Library/ODBC/odbc.ini ~/.odbc.ini
最后,您可以使用针对MySQL的商业ODBC驱动程序进行测试,such as one of my employer's offerings(作为下载的一部分提供两周免费试用)。