我们可以使用Guid作为Sqlite数据库中的主键

use*_*137 36 sqlite uuid android guid primary-key

是否可以将GUID用作SQLITE数据库中的主键?如果可以,可以使用哪种数据类型?

mvp*_*mvp 33

SQLite本身不支持GUID内部类型.

除此之外,确实如此!(有点).请记住,在SQLite中,任何字符串都可以用作类型名称,包括GUIDUUID(更多地了解SQLite数据类型).

根据这些规则,GUID类型具有亲和力NONE,这与BLOB字段相同.考虑到这一点,您可以创建GUID类型列,并使用以下规则来访问它:

这种列也可以用作主键.不幸的是,没有像整数主键那样的AUTOINCREMENT功能 - 你必须自己处理它.你可以使用简单的东西randomblob(16),但它不是标准UUID定义.

令人困惑的是,您还可以将UUID的文本表示存储在同一个字段中(SQLite不会阻止您这样做),但它将占用至少2倍的空间:BLOB是16个字节,UUID作为文本至少是32个字节.


l -*_*c l 11

sqlite3 本身没有本机UUID 128位格式.

但是,GUID可以在SQLite中用作键TEXT或二进制BLOB表示.

根据回答类似问题时发布的性能数字,二进制和字符串UUID 在索引时可以在SQLite中用于创建和查询.

请参阅表:https://stackoverflow.com/a/11337522/3103448

SQLite的可与任一genarate BLOB或TEXT的UUID randomblob(16)hex(X)例如:lower(hex(randomblob(16)))

利用类似的索引性能,显着的权衡取决于人类可读字符串是否优先于较小的二进制数据大小.

  • 我自己的经验表明,从字符串转换到 BLOB 表示有巨大的性能优势。 (3认同)
  • randomblob(16) 生成格式错误的 UUID 值。请参阅 RFC 4122 了解如何正确生成它们,或者仅使用您的应用程序编写的任何语言的库函数。 (3认同)