SQLite 中文指南之FAQ第2/6页
更新时间:2008年09月12日 18:09:17 作者:
sqllite使用过程中碰到的一些问题解决,中文版
(4) 为什么 SQLite 认为表达式 '0'=='00' 为真?
在 2.7.0 之后,表达式不成立。参见文档 datatypes in SQLite version 3
(5) 为什么 SQLite 不允许在同一张表里使用 '0' 和 '0.0' 作为两个不同的行的主键?
你的主键一定是数值类型的,把类型改为 TEXT 就可以了。
每一行必须有一个唯一的主键。作为一个数字类型的字段,SQLite 认为 '0' 和 '0.0'的值是相同的, 因为他们在数字上的比较是相等的(看前面的问题)因此值不是唯一的。
(6) 为什么不能在 Linux box 中读取在 SparcStation 中创建的 SQLite 数据库?
你需要升级你的 SQLite 库到 2.6.3 或更新版本。
x86 处理器是 little-endian 型的而 Sparc 是 big-endian 型的。新版本的 SQLite 解决了这个问题。
注: big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是 6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是 little endian。
(7) 多个应用程序或者同一个应用程序的多个例程能同时存取同一个数据库文件吗?
多进程可以同时打开同一个数据库,也可以同时 SELECT 。但只有一个进程可以立即改数据库。
SQLite使用读/写锁定来控制数据库访问。(Win95/98/ME 操作系统缺乏读/写锁定支持,在低于 2.7.0 的版本中,这意味着在 windows 下在同一时间内只能有一个进程读数据库。在版本 2.7.0 中 这个问题通过在 windows 接口代码中执行一个用户间隔几率读写锁定策略解决了。) 但如果数据库文件在一个 NFS 文件系统中,控制并发读书的锁定机制可以会出错。因为 NFS 的fcntl() 文件锁定有时会出问题。如果有多进程可能并发读数据库则因当避免把数据库文件放在 NFS 文件系统中。 根据微软的文档,如果不运行 Share.exe 后台程序则 FAT 文件系统中的锁定可能不工作。对 Windows 非常有经验的人告诉我网络文件的锁定有许多问题并且不可靠。如果是这样,在2个或以上 Windows 系统中共享一个 SQLite 数据库文件会导致不可预知的问题。
我们知道没有其他的嵌入式 SQL数据库引擎比SQLite支持更多的并发性。 SQLite允许多进程 同时打开和读取数据库。任何一个进程需要写入时,整个数据库将在这一过程中被锁定。但这一般仅耗时 几毫秒。其他进程只需等待然后继续其他事务。其他嵌入式SQL数据库引擎往往只允许单进程访问数据库。
最新评论