閱讀410 返回首頁    go windows


數值類型__數據類型_SQL語法參考_雲數據庫 OceanBase-阿裏雲

數值類型按精確度可以劃分為兩類:

  • 精確數據類型
    • 整數數據類型 TINYINT, SAMLLINT, MEDIUMINT, INTEGER, BIGINT
    • 定點數據類型 DECIMAL, NUMERIC
  • 近似數據類型 FLOAT, REAL, DOUBLE PRECISIONs

整數數據類型如下表:

類型大小(字節)範圍最小值最大值
(帶符號的/無符號的)(帶符號的/無符號的)(帶符號的/無符號的)
TINYINT127-1-128127
28-10255
SMALLINT2215-1-3276832767
216-1065535
MEDIUMINT3223-1-83886088388607
224-1016777215
INT4231-1-21474836482147483647
232-104294967295
BIGINT8263-1-92233720368547758089223372036854775807
264-1018446744073709551615

定點數據類型如下表:

類型範圍用途
DECIMAL (M,D)
NUMERIC (M,D)
DECIMAL、NUMERIC等價;
變長數據類型;
精度(M)最大位數38,標度(D)最大位數30,具體取值範圍是受精度和標度的約束。(與MySQL不一致)
定點數值

浮點數據類型如下:

類型大小(字節)用途
FLOAT4單精度浮點數值
FLOAT(p)如果0 <= p <= 24為4個字節,
如果25 <= p <= 53為8個字節
0到24的精度對應FLOAT列的4字節單精度。
25到53的精度對應DOUBLE列的8字節雙精度。
DOUBLE [PRECISION]8雙精度浮點數值

說明

  1. 在TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT類型中都可以指定顯示寬度,格式為“數據類型(M)”,比如INT(20),這裏的M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與存儲大小或類型包含的值的範圍無關。

  2. UNSIGNED 修飾符規定字段隻保存正值。

  3. ZEROFILL修飾符規定0(不是空格)可以用於填補輸出值。如果為一個數值列指定ZEROFILL,係統自動為該列添加UNSIGNED屬性。

  4. SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一個別名。在整數列定義中,SERIAL DEFAULT VALUE是NOT NULL AUTO_INCREMENT UNIQUE的一個別名。

  5. BOOL(BOOLEAN)類型等價於TINYINT類型。

  • TINYINT

    TINYINT[(M)] [UNSIGNED] [ZEROFILL]

    很小的整數。帶符號的範圍是-128到127。無符號的範圍是0到255。

  • BOOL,BOOLEAN

    是TINYINT(1)的同義詞。zero值被視為假。非zero值視為真。

  • SMALLINT

    SMALLINT[(M)] [UNSIGNED] [ZEROFILL]

    小的整數。帶符號的範圍是-32768到32767。無符號的範圍是0到65535。

  • MEDIUMINT

    MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]

    中等大小的整數。帶符號的範圍是-8388608到8388607。無符號的範圍是0到16777215。

  • INT

    INT[(M] [UNSIGNED] [ZEROFILL]

    普通大小的整數。帶符號的範圍是-2147483648到2147483647。無符號的範圍是0到4294967295。

    將非法的int值插入表之前會自動改為0。

  • INTEGER

    INTEGER[(M)] [UNSIGNED] [ZEROFILL]

    INT的同義詞。

  • BIGINT

    BIGINT[(M)] [UNSIGNED] [ZEROFILL]

    大整數。帶符號的範圍是-9223372036854775808到9223372036854775807。無符號的範圍是0到18446744073709551615。

    使用帶符號的BIGINT或DOUBLE值進行所有算法,因此除了位函數,不應使用大於9223372036854775807(63位)的無符號的大整數!如果這樣做,結果中的最後幾位可能出錯,這是由於將BIGINT值轉換為DOUBLE進行四舍五入時造成的錯誤。

    可以在以下情況下處理BIGINT:

    • 當使用整數在一個BIGINT列保存大的無符號的值時。

    • 在MIN(col_name)或MAX(col_name)中,其中col_name指BIGINT列。

    • 使用操作符(+,-,*等等)並且兩個操作數均為整數時。

    • 總是可以使用一個字符串在BIGINT列中保存嚴格整數值。在這種情況下,執行字符串-數字轉換,其間不存在雙精度表示。

    • 當兩個操作數均為整數值時,-、+和* 操作符使用BIGINT算法。這說明如果乘兩個大整數(或來自返回整數的函數),當結果大於9223372036854775807時,會得到意想不到的結果。

  • FLOAT

    FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

    小(單精度)浮點數。允許的值範圍為-2128 ~ +2128,也即-3.402823466E+38到-1.175494351E-38、0和1.175494351E-38到3.402823466E+38。這些是理論限製,基於IEEE標準。實際的範圍根據硬件或操作係統的不同可能稍微小些。

    M是小數總位數,D是小數點後麵的位數。如果MD被省略,根據硬件允許的限製來保存值。單精度浮點數精確到大約7位小數位。

    如果指定UNSIGNED,不允許負值。

    使用浮點數可能會遇到意想不到的問題,因此所有計算用雙精度完成。

  • DOUBLE

    DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

    普通大小(雙精度)浮點數。允許的值範圍為:-21024 ~ +21024,也即是-1.7976931348623157E+308到-2.2250738585072014E-308、0和2.2250738585072014E-308到 1.7976931348623157E+308。這些是理論限製,基於IEEE標準。實際的範圍根據硬件或操作係統的不同可能稍微小些。

    M是小數總位數,D是小數點後麵的位數。如果MD被省略,根據硬件允許的限製來保存值。雙精度浮點數精確到大約15位小數位。

    如果指定UNSIGNED,不允許負值。

  • DOUBLE PRECISION

    DOUBLE PRECISION [(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]

    為DOUBLE的同義詞。

  • FLOAT(p)

    FLOAT(p) [UNSIGNED] [ZEROFILL]

    浮點數。p表示精度(以位數表示),隻使用該值來確定是否結果列的數據類型為FLOAT或DOUBLE。如果p為從0到24,數據類型變為沒有M或D值的FLOAT。如果p為從25到53,數據類型變為沒有M或D值的DOUBLE。結果列範圍與本節前麵描述的單精度FLOAT或雙精度DOUBLE數據類型相同。

  • DECIMAL(與MySQL不完全一致)

    DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

    壓縮的“嚴格”定點數。M是小數位數(精度)的總數,D是小數點(標度)後麵的位數。小數點和‘-’(負數)符號不包括在M中。如果D是0,則值沒有小數點或分數部分。DECIMAL整數最大位數(M)為38(MySQL 為65)。支持的十進製數的最大位數(D)是30。如果D被省略, 默認是0。如果M被省略, 默認是10。

    如果指定UNSIGNED,不允許負值。

    所有DECIMAL列的基本計算(+,-,*,/)用38(MySQL為65)位精度完成。

    DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]是DECIMAL的同義詞。FIXED同義詞適用於與其它服務器的兼容性。

  • NUMERIC

    NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL]是DECIMAL的同義詞。

最後更新:2016-11-23 16:03:54

  上一篇:go 分區管理__分區_SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go 字符串類型__數據類型_SQL語法參考_雲數據庫 OceanBase-阿裏雲