SQLite 3 中的資料型別

2021-07-27 18:17:13 字數 2255 閱讀 6297

sqlite使用動態型別系統,在sqlite中,值的資料型別和值本身,而不是和它的容器,關聯在一起的。sqlite的動態型別系統和其他資料庫引擎的靜態型別系統是相容的,這樣在靜態型別的資料庫上執行的sql語句也可以在sqlite中執行。

1.0 儲存類和資料型別

每個儲存在sqlite資料庫中(或被資料庫引擎操縱的)的值都有下列儲存類的乙個:

注意儲存類(storage class)比資料型別更一般。integer儲存類,例如,包含6種長度不同的整數資料型別。這在磁碟中是有區別的。不過一旦integer值從磁碟讀到內容中進行處理的時候,這些值會轉化為更普通的資料型別(8位有符號整數)。因此在大部分情況下,儲存類和資料型別是不易分辨的,這兩個術語可以交換使用。

在sqlite 3 資料庫中,任何列,除了integer primary key列,都可以儲存任何儲存類的值。

sql語句中的所有值,不管是sql語句中嵌入的字面值,還是預編譯的sql語句中的引數,都有乙個隱式的儲存類。在下面描述的條件下,在查詢執行階段,資料庫引擎可能會在數字儲存類(integer和real)和text儲存類之間轉換。

1.1 boolean資料型別

sqlite沒有單獨的boolean儲存類,相反,booean值以整數0(false)和1(true)儲存。

1.2 日期和時間資料型別

sqlite沒有為儲存日期和/或時間設定專門的儲存類,相反,內建的日期和時間函式能夠把日期和時間作為text,real或integer值儲存:

2.0 型別相像(type affinity)

為了最大化sqlite和其他資料庫引擎之間的相容性,sqlite支援列的」型別相像「的概念。這裡重要的思想是,型別是推薦的,不是必需的。任何列仍然能夠儲存任何型別的資料。只是某些列,能夠選擇優先使用某種儲存類。這個對列的優先儲存類稱作它的」相像「。

sqlite 3 資料庫中的每個列都賦予下面型別相像中的乙個:

帶有text相像的列會使用儲存類null、text或blob來儲存所有的資料。如果資料資料被插入到帶有text相像的列中,它會在插入前轉換為文字格式。

帶有numeric相像的列可以使用所有5個儲存類來包含值。當文字資料被插入到乙個numeric列,文字的儲存類會被轉換成integer或real(為了優先),如果這個轉換是無損的和可逆的話。如果text到integer或real的轉換是不可能的,那麼值會使用text儲存類儲存。不會試圖轉換null或blob值。

……2.1 列相像的確定

列相像是由列宣告的型別確定的,規則是按照下面的順序:

1. 如果宣告的型別包含字串」int「那麼它被賦予integer相像。

2. 如果列宣告的型別包含任何字串」char「,」clob「,或」text「,那麼此列擁有text相像。注意型別varchar包含」char「,因此也會賦予text相像。

3. 如果列宣告的型別包含」blob「或沒有指定型別,那麼此列擁有none相像。

4. 如果列宣告的型別包含任何」real「,」floa「,或」doub「,那麼此列擁有real相像。

5. 其他情況,相像是numeric。

注意規則的順序是重要的。宣告型別為「charint」的列同時匹配規則1和規則2,但第乙個規則會優先採用,因此此列的相像是integer。

2.2 相像示例

示例相像結果

規則int

integer

tinyint

smallint

mediumint

bigint

unsigned big int

int2

int8

inetger

1character(20)

varchar(255)

varying character(255)

nchar(55)

native character(70)

nvarchar(100)

text

clob

text

2blob

未指定資料型別

none

3real

double

double precision

float

real

4numeric

decimal(10, 5)

boolean

date

datetime

numeric5

注意「floating point」型別會指定integer相像,而不是real相像,因為」int「在末尾。」string「型別會擁有numeric相像,而不是text。

(略)

SQLite 3 中的資料型別

sqlite使用動態型別系統,在sqlite中,值的資料型別和值本身,而不是和它的容器,關聯在一起的。sqlite的動態型別系統和其他資料庫引擎的靜態型別系統是相容的,這樣在靜態型別的資料庫上執行的sql語句也可以在sqlite中執行。1.0 儲存類和資料型別 每個儲存在sqlite資料庫中 或被資...

sqlite3資料型別和常用函式

一 sqlite3支援的資料型別 null integer real text blob 但是,sqlite3也支援如下的資料型別 smallint 16位整數 integer 32位整數,int同integer。decimal p,s p是精確值,s是小數字數 float 32位實數 double...

sqlite3 資料同步

在乙個小專案中,用到 sqlite3 需要同步兩個表,懶得裝工具,寫了兩個函式搞掂。貼 出來給需要的朋友。encoding utf 8 author 陳年椰子 contact hndm qq.com version 1.0 file workdb.py time 2019 6 18 17 32 說明...