通常數據採用的固定的靜態數據類型,而SQLite採用的是動態數據類型,會根據存入值自動判斷。
SQLite具備如下五種數據類型:
1.NULL:空值。
2.INTEGER:帶符號的整型,具體取決有存入數字的範圍大小。
3.REAL:浮點數字,存儲爲8-byte IEEE浮點數。
4.TEXT:字符串文本。
5.BLOB:二進制對象。
但實際上,sqlite3也接受以下的數據類型:
smallint 16 位元的整數。
integer 32 位元的整數。
decimal(p,s) p 精確值和 s 大小的十進位整數,精確值p是指所有有幾個數(digits)大小值,s是指小數點後有幾位數。若是沒有特別指定,則系統會設爲 p=5; s=0 。
float 32位元的實數。
double 64位元的實數。
char(n) n 長度的字串,n不能超過 254。
varchar(n) 長度不固定且其最大長度爲 n 的字串,n不能超過 4000。
graphic(n) 和 char(n) 同樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是爲了支援兩個字元長度的字體,例如中文字。
vargraphic(n) 可變長度且其最大長度爲 n 的雙字元字串,n不能超過 2000
date 包含了 年份、月份、日期。
time 包含了 小時、分鐘、秒。
timestamp 包含了 年、月、日、時、分、秒、千分之一秒。
datetime 包含日期時間格式,必須寫成'2010-08-05'不能寫爲'2010-8-5',不然在讀取時會產生錯誤!
Sqlite經常使用數據類型,
這句話自己就有問題,由於:SQLite是無類型的. 這意味着你能夠保存任何類型的數據到你所想要保存的任何表的任何列中, 不管這列聲明的數據類型是什麼(只有自動遞增Integer Primary Key纔有用). 對於SQLite來講對字段不指定類型是徹底有效的. 如:
javascript
親和性名字實例
下表顯示了有多少從更傳統的SQL實現的經常使用數據類型名,經過上一節介紹的五個規則被轉換成各類親和性類型。這張表只顯示了SQLite可接受的一小部分數據類型名。注意:跟在類型名後,括號內數值參數(如:VARCHAR(255))將被SQLite忽略 - SQLite不對字符串、BLOBs或數值的長度強加任何限制(除了大型全局SQLITE_MAX_LENGTH限制)。html
Example Typenames From The CREATE TABLE Statement or CAST Expression |
Resulting Affinity | Rule Used To Determine Affinity |
---|---|---|
INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 |
INTEGER | 1 |
CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB |
TEXT | 2 |
BLOB no datatype specified |
NONE | 3 |
REAL DOUBLE DOUBLE PRECISION FLOAT |
REAL | 4 |
NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME |
NUMERIC | 5 |
注意: 由於在「POINT」末尾的「INT」,一個「 FLOATING POINT」聲明類型 會被賦予整型親和性,而不是實數親和性。並且「STRING」聲明類型具備數值親和性,而不是文本親和性。java
- Create Table ex3(a, b, c);
即便SQLite容許忽略數據類型, 可是仍然建議在你的Create Table語句中指定數據類型. 由於數據類型對於你和其餘的程序員交流, 或者你準備換掉你的數據庫引擎是很是有用的. SQLite支持常見的數據類型, 如:
git
- CREATE TABLE IF NOT EXISTS ex2(
- a VARCHAR(10),
- b NVARCHAR(15),
- c TEXT,
- d INTEGER,
- e FLOAT,
- f BOOLEAN,
- g CLOB,
- h BLOB,
- i TIMESTAMP,
- j NUMERIC(10,5),
- k VARYING CHARACTER (24),
- l NATIONAL VARYING CHARACTER(16)
- );
char、varchar、text和nchar、nvarchar、ntext的區別
一、CHAR。CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,好比定義char(10),那麼不論你存儲的數據是否達到了10個字節,都要佔去10個字節的空間,不足的自動用空格填充。
二、VARCHAR。存儲變長數據,但存儲效率沒有CHAR高。若是一個字段可能的值是不固定長度的,咱們只知道它不可能超過10個字符,把它定義爲 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。爲何「+1」呢?這一個字節用於保存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際狀況找到權衡點。
三、TEXT。text存儲可變長度的非Unicode數據,最大長度爲2^31-1(2,147,483,647)個字符。
四、NCHAR、NVARCHAR、NTEXT。這三種從名字上看比前面三種多了個「N」。它表示存儲的是Unicode數據類型的字符。咱們知道字符中,英文字符只須要一個字節存儲就足夠了,但漢字衆多,須要兩個字節存儲,英文與漢字同時存在時容易形成混亂,Unicode字符集就是爲了解決字符集這種不兼容的問題而產生的,它全部的字符都用兩個字節表示,即英文字符也是用兩個字節表示。nchar、nvarchar的長度是在1到4000之間。和char、varchar比較起來,nchar、nvarchar則最多存儲4000個字符,不管是英文仍是漢字;而char、varchar最多能存儲8000個英文,4000個漢字。能夠看出使用nchar、nvarchar數據類型時不用擔憂輸入的字符是英文仍是漢字,較爲方便,但在存儲英文時數量上有些損失。
因此通常來講,若是含有中文字符,用nchar/nvarchar,若是純英文和數字,用char/varchar。程序員