哈斯克尔,华夏邓白氏中国,ODBC,MySQL和Mac OS X的

问题描述:

我试图使用哈斯克尔(版本6.10.3)和华夏邓白氏连接到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)之上。哈斯克尔,华夏邓白氏中国,ODBC,MySQL和Mac OS X的

我大部分时间一直使用http://en.wikibooks.org/wiki/Haskell/Database此页面上的说明。在此处:

“#将odbcinst.ini文件(在$ ODBC_HOME/etc /下)和$ HOME/.odbc.ini中的数据源添加到mysql驱动程序中。

它看起来像MacPorts的版本的unixODBC的安装全部在/ opt /本地/。我已经将odbcinst.ini放入/ opt/local/etc /中,并且在我的主目录中创建了一个.odbc.ini,这看起来像这样(请注意,我已经尝试过使用UID和USERNAME以及PWD和密码):

 
[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 <- 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 = MyODBC的一个DSN; UID = [隐藏]; PW D = [隐藏]“,它列出了数据库中的所有表格。

+0

它看起来模糊地类似于这个http://software.complete.org/software/issues/show/106,除非如果我尝试runghc而不是编译它的错误与“无法加载.so/.DLL for :odbc“,所以我的所有测试都使用了编译版本。 – 2009-08-30 22:44:48

这可能是一个问题的unixODBC而不是一个Haskell/HDBC/HDBC-ODBC问题。运行“isql myodbc”导致“总线错误”。运行“isql -v myodbc”不会提供更多信息。运行isql [uid] [pwd]连接就好了。

iODBC的,由my employer维护和支持,自捷豹(10.2.x中)附带的Mac OS X中的一部分。

你会比updating iODBC with all the latest patches更好(苹果往往会落后于这些),而不是转向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 

最后,你可能会从商业的ODBC驱动程序为MySQL测试中受益,such as one of my employer's offerings(二两周的免费试用作为下载的一部分提供)。