解决了一个困扰我3个月的问题,发贴纪念一下!
三个月以前就知道MUSHclient4.40提供了SQLite的API,MUSH有了SQLite的支持会更强大,但实际使用中却发现,SQLITE内部数据的存储是UTF-8的,而MUD里抓出来的文字都是GB2312的,实际使用SQL语句查询的时候(尤其是模糊查询)根本不会有正确的结果,郁闷了好久(最后改回了ACCESS),今天终于找到了解决的办法!luaiconv
根据GAMMON的贴子以及前段时间duno关于dll编译的帮助,改写了luaiconv.c,重新编译成.dll文件,MUSH已经可以正常调用了,调用的例子如下:
function test_iconv()
assert (package.loadlib ("luaiconv.dll", "luaopen_iconv")) ()
local cd = iconv.open("UTF-8", "GB2312") -- set the codeset's convertion is from GB2312 to UTF-8.
local text = "中国"
local outstr, err = cd:iconv(text) -- call iconv() method to convert the text's codeset.
if err == iconv.ERROR_INCOMPLETE then
print("ERROR: Incomplete input.")
elseif err == iconv.ERROR_INVALID then
print("ERROR: Invalid input.")
elseif err == iconv.ERROR_NO_MEMORY then
print("ERROR: Failed to allocate memory.")
elseif err == iconv.ERROR_UNKNOWN then
print("ERROR: There was an unknown error.")
end -- if;
print(outstr)
print(err)
end -- test_iconv()
下面就要开始我的SQLITE之旅了……hz7 “MUSH有了SQLite的支持会更强大”
怎么个强大法?
和ACCESS相比有什么显著优势? SQLite 是什么,头一次听说 为什么呢? 我印象中JavaScript是可以连sql sever的吧,看看API 原帖由 netants 于 2009-8-15 19:52 发表 http://pkuxkx.com/forum/images/common/back.gif
我印象中JavaScript是可以连sql sever的吧,看看API
SQLite不是以server/client方式运行的,实际上它是一个硬盘文件,运行的时候load进内存中,数据库操作都在内存中完成,所以速度比s/c方式的数据库要快。
javascript我印象中好像可以用ODBC的方式连接,但ODBC的效率实在是数据库连接中的下策。 原帖由 maper 于 2009-8-15 19:06 发表 http://pkuxkx.com/forum/images/common/back.gif
“MUSH有了SQLite的支持会更强大”
怎么个强大法?
和ACCESS相比有什么显著优势?
说实话,因为编码问题的困扰,这3个月没怎么弄SQLite,只能说个大概。
SQLite本身和ACCESS比比较,性能,容量,可扩展性等等都比ACCESS要高。
在MUSH应用上,由于MUSH有API,可以不用ODBC的方法连接,所以就不用去调整DSN什么的了。
另外,据说SQLITE支持TCL编程,可以考虑把地图数据存入数据库以后,用数据库中编程,自动生成路径……有点YYyct36
暂时就想到这么多了……
谁能补充一下? 要是数据库就在本地,odbc没啥问题吧 原帖由 netants 于 2009-8-15 20:22 发表 http://pkuxkx.com/forum/images/common/back.gif
要是数据库就在本地,odbc没啥问题吧
把机器人移植到其它机器上,odbc需要调整DSN的。 我怎么记得JavaScript不用设置odbc呢?应该是用的方法跟ADO.NET差不多