use*_*137 36 sqlite uuid android guid primary-key
是否可以将GUID用作SQLITE数据库中的主键?如果可以,可以使用哪种数据类型?
mvp*_*mvp 33
SQLite本身不支持GUID
内部类型.
除此之外,确实如此!(有点).请记住,在SQLite中,任何字符串都可以用作类型名称,包括GUID
或UUID
(更多地了解SQLite数据类型).
根据这些规则,GUID
类型具有亲和力NONE
,这与BLOB
字段相同.考虑到这一点,您可以创建GUID
类型列,并使用以下规则来访问它:
将其存储为字符串X'01020304050607080910111213141516'
(X表示法用于表示16字节BLOB
值).要插入,请使用:
INSERT INTO mytable (uuid)
VALUES (X'01020304050607080910111213141516');
Run Code Online (Sandbox Code Playgroud)将其读为16字节BLOB
.quote(uuid)
可用于使用X表示法格式化输出:
SELECT quote(uuid)
FROM mytable
Run Code Online (Sandbox Code Playgroud)这种列也可以用作主键.不幸的是,没有像整数主键那样的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)))
利用类似的索引性能,显着的权衡取决于人类可读字符串是否优先于较小的二进制数据大小.
归档时间: |
|
查看次数: |
35325 次 |
最近记录: |