Sqlite
儲存在 SQLite Integer 列中的文本字元串?
我是一名數據庫新手,正在研究一個似乎將文本儲存在整數列中的 SQLite 數據庫。這是 sqlite3 命令行的範例會話:
sqlite> .schema mytable CREATE TABLE mytable ( id integer primary key, /* 0 */ mycol integer not null, /* 1 */ ); sqlite> SELECT mycol FROM mytable; here is some text here is more text [...] it's text all the way down
我糊塗了。是什麼賦予了?
這是 SQLite 的一個眾所周知的“怪癖”。
SQLite 使用它所謂的動態類型系統,這最終意味著您可以將文本儲存在整數欄位中——在 Oracle、SQL Server 和數據庫世界中的所有其他大熱門中,嘗試這樣做都會失敗——而不是使用 SQLite。
看看這裡:
SQLite 使用更通用的動態類型系統。在 SQLite 中,值的數據類型與值本身相關聯,而不是與其容器相關聯。SQLite 的動態類型系統向後兼容其他數據庫引擎的更常見的靜態類型系統,因為在靜態類型數據庫上工作的 SQL 語句應該在 SQLite 中以相同的方式工作。然而,SQLite 中的動態類型允許它完成傳統剛性類型數據庫中不可能完成的事情。
此處概述了該系統的優點。
注意:數據類型限制可能很麻煩,尤其是當您在 SQL 中添加持續時間、日期或類似性質的東西時。SQLite 有很少的內置函式來處理這類事情。但是,SQLite 確實為您提供了一種簡單的方法來製作自己的內置函式來添加持續時間和類似性質的東西,
我認為 SQLite 的觀點有點像關於 C 程式語言的引用——
“C 允許你做非常愚蠢的事情,因為它也允許你做非常聰明的事情。”
SQLite 也是如此。
查看上面引用的整個 StackOverflow 執行緒。
SQLite 中的數據類型更像是“提示”而不是命令。