哈斯克尔,华夏邓白氏中国,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 = [隐藏]“,它列出了数据库中的所有表格。
这可能是一个问题的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(二两周的免费试用作为下载的一部分提供)。
它看起来模糊地类似于这个http://software.complete.org/software/issues/show/106,除非如果我尝试runghc而不是编译它的错误与“无法加载.so/.DLL for :odbc“,所以我的所有测试都使用了编译版本。 – 2009-08-30 22:44:48