关于sql:什么时候sqlite的manifest输入有用吗?

When is sqlite's manifest typing useful?

sqlite使用作者称之为"Manifest Typing"的东西,这基本上意味着sqlite是动态类型的:如果你愿意,你可以在一个"int"列中存储一个varchar值。

这是一个有趣的设计决定,但每当我使用sqlite时,我就像标准的RDMS一样使用它,并将类型视为静态。 实际上,在其他系统中设计数据库时,我甚至从未希望使用动态类型列。

那么,这个功能何时有用? 有没有人在实践中找到了一个很好用的东西,用静态类型的列不能轻易完成?


它真的只是使类型更容易使用。您不必担心这个字段在数据库级别需要多大,或者您的整数可以有多少个。或多或少是'为什么不呢?'事情。

另一方面,SQL Server中的静态类型允许系统更好地搜索和索引,在某些情况下更好,但是对于所有应用程序的一半,我怀疑数据库性能改进是否重要,或者他们的性能对其他人来说"差"。原因(每个选择创建临时表,指数选择等)。

我一直使用SqLite将我的.NET项目作为客户端缓存,因为它太容易使用了。现在,如果他们只能使用与SQL服务器相同的GUID,那么我将是一个快乐的露营者。


动态类型对于存储配置设置等内容非常有用。以Windows注册表为例。每个键都很像一个表格的SQLite表:

CREATE TABLE设置(名称TEXT PRIMARY KEY,Value);

其中Value可以是NULL(REG_NONE)或INTEGER(REG_DWORD / REG_QWORD),TEXT(REG_SZ)或BLOB(REG_BINARY)。

此外,我必须同意Jasons关于不强制执行字符串最大大小的有用性。因为在很多时候,这些限制纯粹是任意的,你可以指望有一天找到一个需要存储在VARCHAR中的32字节字符串(30)。