當前位置:成語大全網 - 書法字典 - mysql數據類型的詳細說明

mysql數據類型的詳細說明

MySQL數據庫的表是壹個二維表,由壹個或多個數據列組成。

每個數據列都有其特定的類型,這決定了MySQL如何查看列數據。我們可以將整數值存儲在字符類型的列中,MySQL會將它們視為字符串。

MySQL中有三種類型的列:數字、字符串和日期/時間。

從大的類別來看,列類型只有三種,就像數值類型壹樣。但是每個列類型都可以細分。

下面詳細描述了各種列類型。

數值類的數據列類型

數字列類型包括整數和浮點類型。

Tinyint: 1 bytes是壹個非常小的正整數,帶符號:-128~127,無符號:0~255。

SMALLINT:2字節小整數,有符號:-32768~32767,無符號:0~65535

Medium:中等大小的3字節整數,有符號:-8388608~8388607,無符號:0~16777215。

Int: 4字節標準整數,有符號:-2147483648 ~ 2147483647,無符號:0~4294967295。

Bigint: 8字節整數,有符號:-9223372036854775808 ~ 92337203685475807,無符號:0 ~ 1844644073709551615。

Float: 4字節單精度浮點數,最小非零值:+-1.175494351e-38,最大非零值:+-3.4023466e+38。

Double: 8字節雙精度浮點數,最小非零值:+-2.22507385072014e-308,最大非零值:+-1.7961348 623157 e+308。

Decimal:字符串形式的M+2字節浮點數,取值範圍可變,由M和D的值決定..

MYSQL支持大量的列類型,可以分為三類:數字類型、日期和時間類型以及字符串(字符)類型。本章首先概述了可用的類型並總結了每種類型的存儲要求,然後更詳細地描述了每種類型中的類型類別。概述被有意簡化。更詳細的描述應參考特寫列類型的附加信息,例如,您可以為其指定值的允許格式。

下面列出了MySQL支持的列類型。描述中使用了以下代碼字母:

m表示最大顯示尺寸。最大顯示尺寸長度為255。d適用於浮點類型。指示小數點後的位數。最大可能值為30,但不應大於M-2。

方括號(“【“和“】“)指定可選的類型修飾符。

請註意,如果為列指定了ZEROFILL,MySQL將自動為該列添加無符號屬性。

警告:您應該知道當您在兩個整數值之間使用減法時,如果其中壹個是無符號的,那麽結果也是無符號的。參見第6.3.5節Cast函數。

tinyint【(m)】【無符號】【零填充】-128到127。無符號範圍是0到255。

BITBOOL它們是TINYINT(1)的同義詞。

small【(m)】【unsigned】【zero fill】是壹個小整數。有符號範圍是-32768到32767。無符號範圍是0到65535。

mediumint【(m)】【unsigned】【zero fill】是壹個中等大小的整數。有符號範圍是-8388608到8388607。無符號範圍是0到16777215。

INT【(M)】【UNSIGNED】【zero fill】正常大小的整數。有符號範圍是-2147483648到2147483647。無符號範圍是0到4294967295。

integer【(m)】【unsigned】【zero fill】int的同義詞。

bigint【(m)】【unsigned】【zero fill】是壹個大整數。有符號範圍是-9223372036854775808到9223685475807。無符號範圍是0到1844674073709551615。

關於BIGINT列,您應該知道壹些事情:

BIGINT或DOUBLE值,因此不應使用大於9223372036854775807(63位)的無符號大整數,位函數除外!如果這樣做,結果中的壹些大數字可能是錯誤的,因為在將BIGINT轉換為DOUBLE時會出現舍入錯誤。MySQL 4.0可以在以下情況下處理BIGINT:

使用整數在BIGINT列中存儲壹個大的無符號值。

in MIN(big _ int _ column)和MAX(big _ int _ column)。

運算符(+、-、*等。)在兩個操作數都是整數時使用。

通常,您可以將精確整數作為字符串存儲在BIGINT列中。在這種情況下,MySQL將執行字符串到數字的轉換,包括無中間數據的雙精度表示。

當兩個參數都是整數值時,“-”、“+”和“*”將使用BIGINT運算!這意味著如果兩個大整數乘積的結果(或函數返回的結果是壹個整數)大於9223372036854775807,您可能會得到意外的結果。

float(precision)【無符號】【zerofill】浮點數。

精度可以是

float【(m,d)】【無符號】【零填充】壹個小的(單精度)浮點數。允許的值為-3.402823466E+38到-1.175451e-38,0和1.175438+0e-38到3.5466 e .如果指定了UNSIGNED,則不允許負值。m是顯示寬度,d是小數位數。FLOAT沒有參數或x

double【(m,d)】【無符號】【zerofill】正常大小的浮點數(雙精度)。允許的值為-1.796961348 623157 e+308到-2.2014e-308,0和2.3488+04e-如果指定了UNSIGNED,則不允許負值。m是顯示寬度,d是小數位數。DOUBLE沒有Hu參數或有25個參數

雙精度【(M,D)】【無符號】【零填充】

實數【(m,d)】【無符號】【零填充】它們是DOUBLE的同義詞。

decimal【(m【,d】)】【無符號】【zerofill】未壓縮的浮點數。工作方式類似於CHAR列:“unpacked”意味著數字存儲為字符串,並且值的每壹位都將使用壹個字符。小數點和負數的“-”符號不計入m(但它們的空格被保留)。如果d為0,該值將沒有小數點或小數部分。十進制值的最大範圍與DOUBLE壹致,但對於給定的十進制列,實際範圍可以受所選m和d的限制。如果指定了UNSIGNED,則不允許負值。如果省略d,則默認為0。如果省略m,默認值為10。在MySQL 3.23之前,m參數必須包含符號和小數點所需的空間。

DEC【(M【,D】)】【無符號】【零填充】

數字【(m【,d】)】【無符號】【零填充】小數的同義詞。

約會。支持的範圍是“1000-01-01”到“9999-12-31”。MySQL以“YYYY-MM-DD”格式顯示日期值,但允許您將值作為字符串或數字分配給日期列。參見第6 . 2 . 2 . 2章日期、日期和時間戳類型。

日期時間是日期和時間的組合。支持的範圍是“1000-01-01 00:00”到“9999-12-31 23:59:59”。MySQL以“YYYY-MM-DD HH:MM:SS”格式顯示日期時間值,但允許您將值作為字符串或數字分配給日期時間列。參見第6 . 2 . 2 . 2章日期、日期和時間戳類型。

時間戳【(M)】時間戳。範圍是“1970-01-01 00:00:00”到2037年的任何時間。在MySQL 4.0和更低版本中,時間戳值以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD的格式顯示,具體取決於m是14(或省略)、12、8還是6,但您可以將時間戳列指定為字符串或數字。從MySQL 4.1開始,時間戳以“YYYY-MM-DD HH:MM:DD”的格式作為字符返回。如果要以數字形式返回,必須在時間戳字段後添加+0。不支持不同的時間戳長度。從MySQL 4.0.12開始,可以使用選項- new使服務器像4.1壹樣工作。TIMESTAMP列對於記錄插入或更新操作的日期和時間非常有用,因為如果您沒有親自為其賦值,它將自動設置為上次操作的日期和時間。您還可以通過為其指定壹個空值來將其設置為當前日期和時間。參見第6.2.2章日期和時間類型。參數m只影響時間戳列的顯示格式;它的值總是占用4個字節的存儲空間。請註意,當時間戳(M)列的M為8或14時,它返回壹個數字,其他時間戳(M)列返回壹個字符串。這只是為了可靠地轉儲和恢復到其他格式的表。參見第6 . 2 . 2 . 2章日期、日期和時間戳類型。時間,壹個時間。範圍是“-838:59:59”到“838:59:59”。MySQL以“HH:MM:SS”格式顯示時間值,但允許您使用字符串或數字為時間列賦值。參見第6 . 2 . 2 . 3章時間類型。YEAR【(2 | 4)】兩位數或四位數格式的年份(默認為四位數)。允許的值是1901到2155,0000(四位數年份格式)和1970-2069(70-69),使用兩位數格式。MySQL以YYYY格式顯示年份值,但允許您使用字符串或數字為年份列賦值。(MySQL 3.22之前不支持年份類型。)參見第6 . 2 . 2 . 4章年份類型。

【NATIONAL】CHAR(M)【BINARY】固定長度的字符串在存儲時總是用空格填充右側,直到指定長度。m的範圍是0到255(MySQL 3.23版之前是1到255)。當值被檢索時,尾隨空格將被刪除。除非指定了關鍵字BINARY,否則將根據默認字符集對CHAR值進行排序和比較,而不考慮大小寫。NATIONAL CHAR(簡稱NCHAR)是ANSI SQL定義的CHAR列,它將使用默認字符集。這是MySQL中的默認設置。

CHAR是字符的縮寫。MySQL允許您創建CHAR(0)類型的列。壹些舊程序在運行時需要壹個列,但它們不使用該列的值,因此您必須構建該列才能適應它。在這種情況下,CHAR(0)將非常有益。當壹個列只需要存儲兩個值:壹個是CHAR(0)(該列未定義為NOT NULL)時,這將只占用壹個位來存儲兩個值:NULL或“”。請參見第6.2.3.65438章+0CHAR和VARCHAR類型。CHAR這是CHAR(1)的同義詞。

【NATIONAL】VARCHAR(M)【BINARY】長度可變的字符串。註意:保存時將刪除尾隨空格(這與ANSI SQL約定不同)。m的範圍是0到255(在4.0.2之前的MySQL版本中是1到255)。

VARCHAR值以不區分大小寫的方式進行排序和比較,除非指定了關鍵字BINARY。請參見第6.5.3.1章中的隱式列定義更改。VARCHAR是字符變化的縮寫。請參見第6.2.3.65438章+0CHAR和VARCHAR類型。

TINYBLOBTINYTEXT是最大長度為255(2 ^ 8-1)個字符的BLOB或文本列。請參見第6.5.3.1章中的隱式列定義更改。參見第6 . 2 . 3 . 2章BLOB和文本類型。

最大長度為65535(2 16-1)個字符的BLOBTEXT BLOB或文本列。請參見第6.5.3.1章中的隱式列定義更改。參見第6 . 2 . 3 . 2章BLOB和文本類型。

MEDIUMBLOBMEDIUMTEXT是壹個BLOB或文本列,最大長度為1677 7215(2 24-1)個字符。請參見第6.5.3.1章中的隱式列定義更改。參見第6 . 2 . 3 . 2章BLOB和文本類型。

最大長度為4294967295(2 ^ 32-1)個字符的BLOB或文本列。請參見第6.5.3.1章中的隱式列定義更改。請註意,由於服務器/客戶端協議和MyISAM表通常對每個通信包/表行有16M的限制,因此您仍然不能使用這種類型的整個範圍。參見第6 . 2 . 3 . 2章BLOB和文本類型。枚舉(‘值1‘,‘值2‘,...)是壹種枚舉類型。只有壹個值的字符串對象,該值選自值列“值1”、“值2”,...,空或特殊的“”錯誤值。壹個枚舉列最多可以有65535個不同的值。請參見第6 . 2 . 3 . 3節枚舉類型。SET(‘value 1‘,value2,...)壹套。具有零個或多個值的字符串對象,其中每個值都必須從值列“value1”、“value2”中選擇,...集合列最多可以有64個成員。參見第6 . 2 . 3 . 4章器械包類型。

MySQL支持所有ANSI/ISO SQL92數字類型。這些類型包括精確數字的數據類型(數字、小數、整數和小整數)和近似數字的數據類型(浮點、實數和雙精度)。關鍵字INT是整數的同義詞,關鍵字DEC是小數的同義詞。

MySQL將數字和十進制類型實現為相同的類型,這在SQL92標準中是允許的。它們用於存儲對準確性有重要要求的值,例如與金錢相關的數據。當用其中之壹聲明列時,可以(通常)指定精度和數值範圍;例如:

工資小數(5,2)

在本例中,5(精度)表示重要的小數位數,2(數據位數)表示小數點後的位數。因此,在這種情況下,salary列可以存儲範圍從-99.99到99.99的值。(事實上,MySQL可以在該列中存儲高達999.99的值,因為它不存儲正數符號)。

譯者註:

M和D對小數(M,D)取值範圍的影響

類型描述值範圍(MySQL= 3.23)

十進制數(4,1)-9.9到99.9 -999.9到9999.9。

十進制數(5,1)-99.9到999.9 -9999.9到99999.9。

十進制數(6,1)-999.9到9999.9 -99999.9到999999.9。

十進制數(6,2)-99.99到999.99 -9999.99到99999.99

十進制數(6,3)-9.999到99.999 -999.999到9999.999。

#在MySQL 3.23及更高版本中,DECIMAL(M,D)的取值範圍等於早期版本中DECIMAL(M+2,D)的取值範圍。註釋結束:

在ANSI/ISO SQL92中,語法DECIMAL(p)相當於DECIMAL(p,0)。類似地,在執行允許的決策值p的情況下,語法DECIMAL等效於DECIMAL(p,0)。MySQL目前不支持十進制/數字數據類型的任何變體。壹般來說,這不是壹個嚴重的問題,這些類型的主要功能優勢可以通過明確控制精度和數值範圍來獲得。

十進制和數值存儲為字符串,而不是二進制浮點數,以保護這些值的十進制準確性。數值的每壹位都使用壹個字符,小數點(如果比例》1;0)和“-”號(表示負值)。如果小數位數為0,小數和數值不包含小數點或小數部分。

DECIMAL和NUMERIC值的最大範圍與DOUBLE相同,但是對於給定的DECIMAL或NUMERIC列,其實際範圍可以設置列的精度或小數位數限制。當分配給此類列的小數點的位數超過scale指定的值時,該列將根據scale進行舍入。當給定的小數或數值列的大小超過precisionandscale的指定(或默認)限制範圍時,MySQL會將該值存儲為列範圍的端點值。