我在Zentus的Java應用程序中使用SQLite。在這種情況下,我需要保存並查詢我的數據庫中的Java long
值。從其他RDBMS編輯我創建的表如下存儲長值:SQLite數據類型
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
該溶液產生例外的行爲,但閱讀了SQLite documentation on data types後予理解的是,我的LONG
類型具有比使用TEXT
=>longValue
是一樣的效果以文本形式存儲。
然後我決定將其更改爲INTEGER
(該長度是可變的,並且可以存儲多達64位整數,這是Java long的長度),以便具有更簡潔的代碼,並且可以節省一些磁盤空間並增加因爲我的longValues被插入並被詢問爲long
。
比較創建的數據庫,我不能看到任何區別的性能和尺寸後:
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
和
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue INTEGER)
關於這個問題的任何意見,經驗或感受?
因此,我想知道:爲什麼列類型存在? – 2010-08-02 13:26:04
列有「親和力」;例如,傳遞數字字符串的文本列應將其存儲爲文本,並保留格式(小數位等)。 雖然傳遞數字字符串的數字列會在將其存儲之前將其轉換爲數字,因此「10.00」稍後將返回爲「10」。 由於LONG列具有默認數值親和力,因此將類型更改爲INTEGER不會更改任何內容。 – 2010-08-02 13:30:48
SQlite網站的答案是:「爲了最大限度地提高SQLite與其他數據庫引擎的兼容性,SQLite支持列上的」類型親和性「概念。列的類型親和性是存儲在該列中的數據的推薦類型。這裏的重要思想是這個類型是推薦的,不是必需的,任何列都可以存儲任何類型的數據,只是有些列在給出選擇的情況下會傾向於使用一個存儲類而不是另一個「但是什麼」更喜歡「意味着??對性能和數據庫大小有沒有影響? – 2010-08-02 13:31:20