是否可以使用UUID值作爲SQLite中的主鍵?我發現關於這個主題的信息非常有限,所以我不確定SQLite是否支持UUID數據類型。我應該將UUID存儲爲字符串嗎?在SQLite中使用UUID
36
A
回答
20
SQLite允許使用任何data type作爲主鍵。
UUID可以作爲字符串(這是人類可讀的)或16字節的BLOB(如果記錄太小而差別很大,可能會更快)存儲。
20
CL的回答是正確的,但是有些問題擺在眼前。如前所述,任何類型的列(或多列)都可以用作主鍵。所以你可能存儲UUID格式化,人類可讀的字符串格式,並使該表的關鍵。由於UUID只是一個128位的整數,所以您也可以將整數的字節存儲爲BLOB,我想這會稍微快一點。
但是爲了更直接地回答我認爲的問題,不,SQLite 不是有任何直接支持UUID的功能。 SQLite使用列的聲明類型來確定它將使用的五個底層storage classes(整數,實數,文本,blob或null)中的哪一個。但是列的聲明類型被忽略。所以沒有特定於UUID的列類型或存儲類。似乎也沒有任何functions可用於轉換格式化的UUID字符串。要獲得UUID的字節數,您需要查看應用程序編寫語言提供的方法。例如,Java的UUID類或Apple的NSUUID。
4
不知道如何使用它作爲默認的領域,但如果有人需要生成以下辦法suggested here SQLite的查詢唯一值可用於:
的randomblob(N)函數返回一個包含N字節BLOB僞-random 字節。如果N小於1,則返回一個1字節的隨機數據塊。 提示:應用程序可生成一起使用此 功能可以用十六進制全局唯一標識符()和/或下部()是這樣的:
hex(randomblob(16))
或
lower(hex(randomblob(16)))
相關問題
- 1. Android:使用UUID作爲SQLite的主鍵
- 2. 將UUID存儲在sqlite管理器中
- 3. 在OpenOffice.org Base中使用UUID
- 4. 作爲列默認SQLite UUID
- 5. 將使用UUID
- 6. 我應該使用node-uuid還是uuid?
- 7. 如何在Django中使用UUID
- 8. 如何在Yesod中使用UUID?
- 9. 在EclipseLink和PostgreSQL中使用UUID
- 10. 使用java.util.UUID在Jruby中生成UUID?
- 11. 如何使用UUID?
- 12. 在Pig中用UUID過濾
- 13. SQLite查詢 - 在SQLite查詢中使用[]
- 14. 在控制器中使用設備uuid使用onsen-ui
- 15. 在XCode中使用SQLite
- 16. 在Rubymotion中使用SQLite
- 17. 在AsyncTask中使用SQLite
- 18. 在WinRT中(VB.Net)使用SQLite
- 19. 在SQLite中使用日期
- 20. 在WinRT中使用SQLite
- 21. 在android中使用sqlite
- 22. 在sqlite中使用django prefetch_related
- 23. 在Eclipse中使用SQLite
- 24. 在BlackBerry中使用SQLite
- 25. 在Android 4.4.2中使用SQLite
- 26. 在SQLite中使用ForeignCollections
- 27. 在BroadcastReceiver中使用sqlite
- 28. 在Ionic Framework中使用SQLite
- 29. 在Mac App中使用SQLite
- 30. 在SQLite中使用參數
要麼這些數據類型的更有效的比另一個存儲UUID? –
對於其他讀者......人類可讀的36個字符的十六進制字符串看起來是這樣的:'988097c8-3f9c-4ecf-9d1d-64701bb9764c' –
UUID BLOB VS TEXT重要文件的大小,但是,插入和查詢的速度大約是同樣,看http://stackoverflow.com/a/11337522/254109 – xmedeko