MySQL 列數據類型(1)

第11章:列類型
目錄

11.1. 列類型概述
11.1.1. 數值類型概述
11.1.2. 日期和時間類型概述
11.1.3. 字符串類型概述
11.2. 數值類型
11.3. 日期和時間類型
11.3.1. DATETIME、DATE和TIMESTAMP類型
11.3.2. TIME類型
11.3.3. YEAR類型
11.3.4. Y2K事宜和日期類型
11.4. String類型
11.4.1. CHAR和VARCHAR類型
11.4.2. BINARY和VARBINARY類型
11.4.3. BLOB和TEXT類型
11.4.4. ENUM類型
11.4.5. SET類型
11.5. 列類型存儲需求
11.6. 選擇正確的列類型
11.7. 使用來自其餘數據庫引擎的列類型
MySQL支持多種列類型:數值類型、日期/時間類型和字符串(字符)類型。本章首先對這些列類型進行了概述,而後更加詳細地描述了各類列的類型,以及列類型存儲需求的總結。概述很簡單。關於具體列類型的詳細信息應查閱詳細的描述,例如指定值時容許使用的格式。

MySQL支持處理空間數據的擴展名。關於空間類型的信息參見第19章:MySQL中的空間擴展。

幾種列類型描述使用了下述慣例:

·         M

表示最大顯示寬度。最大有效顯示寬度是255。

·         D

適用於浮點和定點類型,並表示小數點後面的位數。最大可能的值是30,但不該大於M-2。

·         方括號(‘[’和‘]’)表示可選部分。

11.1. 列類型概述
11.1.1. 數值類型概述
11.1.2. 日期和時間類型概述
11.1.3. 字符串類型概述
11.1.1. 數值類型概述
下面爲數值列類型的概述。詳細信息參見11.2節,「數值類型」。列存儲需求參見11.5節,「列類型存儲需求」。

M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與存儲大小或類型包含的值的範圍無關,相關描述見11.2節,「數值類型」。

若是爲一個數值列指定ZEROFILL,MySQL自動爲該列添加UNSIGNED屬性。

SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的一個別名。

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

警告:應當清楚,當使用在整數值(其中一個是UNSIGNED類型)之間使用減號時,結果是無符號。參見12.8節,「Cast函數和操做符」。

·         BIT[(M)]

位字段類型。M表示每一個值的位數,範圍爲從1到64。若是M被省略, 默認爲1。

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

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

·         BOOL,BOOLEAN

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

在未來,將根據標準SQL引入徹底布爾類型的處理。

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

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

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

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

·         INT[(M)] [UNSIGNED] [ZEROFILL]

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

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

這是INT的同義詞。

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

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

應清楚BIGINT列的下述內容:

o        使用帶符號的BIGINT或DOUBLE值進行全部算法,所以除了位函數,不該使用大於9223372036854775807(63位)的無符號的大整數! 若是這樣作,結果中的最後幾位可能出錯,這是因爲將BIGINT值轉換爲DOUBLE進行四捨五入時形成的錯誤。

MySQL能夠在如下狀況下處理BIGINT:

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

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

§         使用操做符(+,-,*等等)而且兩個操做數均爲整數時。

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

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

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

小(單精度)浮點數。容許的值是-3.402823466E+38到-1.175494351E-3八、0和1.175494351E-38到3.402823466E+38。這些是理論限制,基於IEEE標準。實際的範圍根據硬件或操做系統的不一樣可能稍微小些。

M是小數縱位數,D是小數點後面的位數。若是M和D被省略,根據硬件容許的限制來保存值。單精度浮點數精確到大約7位小數位。

若是指定UNSIGNED,不容許負值。

使用浮點數可能會遇到意想不到的問題,由於在MySQL中的全部計算用雙精度完成。參見A.5.7節,「解決與不匹配行有關的問題」。

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

普通大小(雙精度)浮點數。容許的值是-1.7976931348623157E+308到-2.2250738585072014E-30八、0和2.2250738585072014E-308到 1.7976931348623157E+308。這些是理論限制,基於IEEE標準。實際的範圍根據硬件或操做系統的不一樣可能稍微小些。

M是小數總位數,D是小數點後面的位數。若是M和D被省略,根據硬件容許的限制來保存值。雙精度浮點數精確到大約15位小數位。

若是指定UNSIGNED,不容許負值。

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

爲DOUBLE的同義詞。除了:若是SQL服務器模式包括REAL_AS_FLOAT選項,REAL是FLOAT的同義詞而不是DOUBLE的同義詞。

·         FLOAT(p) [UNSIGNED] [ZEROFILL]

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

FLOAT(p)語法與ODBC兼容。

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

壓縮的「嚴格」定點數。M是小數位數(精度)的總數,D是小數點(標度)後面的位數。小數點和(負數)的‘-’符號不包括在M中。若是D是0,則值沒有小數點或分數部分。DECIMAL整數最大位數(M)爲65。支持的十進制數的最大位數(D)是30。若是D被省略, 默認是0。若是M被省略, 默認是10。

若是指定UNSIGNED,不容許負值。

全部DECIMAL列的基本計算(+,-,*,/)用65位精度完成。

·         DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]

是DECIMAL的同義詞。FIXED同義詞適用於與其它服務器的兼容性。

11.1.2. 日期和時間類型概述
本節綜合討論了臨時列類型。詳細信息,參見11.3節,「日期和時間類型」。列存儲需求參見11.5節,「列類型存儲需求」。

·         DATE

日期。支持的範圍爲'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式顯示DATE值,但容許使用字符串或數字爲DATE列分配值。

·         DATETIME

日期和時間的組合。支持的範圍是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值,但容許使用字符串或數字爲DATETIME列分配值。

·         TIMESTAMP[(M)]

時間戳。範圍是'1970-01-01 00:00:00'到2037年。

TIMESTAMP列用於INSERT或UPDATE操做時記錄日期和時間。若是你不分配一個值,表中的第一個TIMESTAMP列自動設置爲最近操做的日期和時間。也能夠經過分配一個NULL值,將TIMESTAMP列設置爲當前的日期和時間。

TIMESTAMP值返回後顯示爲'YYYY-MM-DD HH:MM:SS'格式的字符串,顯示寬度固定爲19個字符。若是想要得到數字值,應在TIMESTAMP 列添加+0。

註釋:MySQL 4.1之前使用的TIMESTAMP格式在MySQL 5.1中不支持;關於舊格式的信息參見MySQL 4.1 參考手冊。

·         TIME

時間。範圍是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式顯示TIME值,但容許使用字符串或數字爲TIME列分配值。

·         YEAR[(2|4)]

兩位或四位格式的年。默認是四位格式。在四位格式中,容許的值是1901到2155和0000。在兩位格式中,容許的值是70到69,表示從1970年到2069年。MySQL以YYYY 格式顯示YEAR值,但容許使用字符串或數字爲YEAR列分配值。

11.1.3. 字符串類型概述
本節綜合討論了字符串列類型。詳細信息參見11.4節,「String類型」。列存儲需求參見11.5節,「列類型存儲需求」。

在某些狀況中,MySQL能夠將一個字符串列更改成不一樣於CREATE TABLE或ALTER TABLE語句中所給出的類型。參見13.1.5.1節,「沉寂的列規格變動」。

MySQL 5.1字符串數據類型包括部分在MySQL 4.1以前的版本中沒有的特性:

·         許多字符串數據類型的列定義能夠包括指定字符集的CHARACTER SET屬性,也可能包括校對規則。(CHARSET是CHARACTER SET的一個同義詞)。這些屬性適用於CHAR、VARCHAR、TEXT類型、ENUM和SET。例如:

·                CREATE TABLE t
·                (
·                    c1 CHAR(20) CHARACTER SET utf8,
·                    c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin
·                );
該表定義建立了一個名爲c1的列,具備一個utf8字符集和該字符集的默認 校對規則,和一個名爲c2的列以及latin1字符集和該字符集的二元 校對規則。二元校對規則對大小寫不敏感。

·         MySQL 5.1用字符單位解釋在字符列定義中的長度規範。(之前的一些MySQL版本以字節解釋長度)。

·         對於CHAR、VARCHAR和TEXT類型,BINARY屬性能夠爲列分配該列字符集的 校對規則。

·         字符列的排序和比較基於分配給列的字符集。在之前的版本中,排序和比較基於服務器字符集的校對規則。對於CHAR和VARCHAR 列,你能夠用BINARY屬性聲明列讓排序和 校對規則使用當前的字符代碼值而不是詞彙順序。

關於MySQL 5.1中字符集的支持,參見第10章:字符集支持。

·         [NATIONAL] CHAR(M) [BINARY| ASCII | UNICODE]

固定長度字符串,當保存時在右側填充空格以達到指定的長度。M表示列長度。M的範圍是0到255個字符。

註釋:當檢索CHAR值時尾部空格被刪除。

若是想要將某個CHAR的長度設爲大於255,執行的CREATE TABLE或ALTER TABLE語句將失敗並提示錯誤:

mysql> CREATE TABLE c1 (col1 INT, col2 CHAR(500));
ERROR 1074 (42000): Column length too big for column 'col' (max = 255); use BLOB or TEXT instead
mysql> SHOW CREATE TABLE c1;
ERROR 1146 (42S02): Table 'test.c1' doesn't exist
CHAR是CHARACTER的簡寫。NATIONAL CHAR(或其等效短形式NCHAR)是標準的定義CHAR列應使用 默認字符集的SQL方法。這在MySQL中爲默認值。

BINARY屬性是指定列字符集的二元 校對規則的簡寫。排序和比較基於數值字符值。

列類型CHAR BYTE是CHAR BINARY的一個別名。這是爲了保證兼容性。

能夠爲CHAR指定ASCII屬性。它分配latin1字符集。

能夠爲CHAR指定UNICODE屬性。它分配ucs2字符集。

MySQL容許建立類型CHAR(0)的列。這主要用於必須有一個列但實際上不使用值的舊版本的應用程序相兼容。當你須要只能取兩個值的列時也很好:沒有定義爲NOT NULL的一個CHAR(0)列只佔用一位,只能夠取值NULL和''(空字符串)。

·         CHAR

這是CHAR(1)的同義詞。

·         [NATIONAL] VARCHAR(M) [BINARY]

變長字符串。M 表示最大列長度。M的範圍是0到65,535。(VARCHAR的最大實際長度由最長的行的大小和使用的字符集肯定。最大有效長度是65,532字節)。

註釋:MySQL 5.1聽從標準SQL規範,而且不刪除VARCHAR值的尾部空格。

VARCHAR是字符VARYING的簡寫。

BINARY屬性是指定列的字符集的二元 校對規則的簡寫。排序和比較基於數值字符值。

VARCHAR保存時用一個字節或兩個字節長的前綴+數據。若是VARCHAR列聲明的長度大於255,長度前綴是兩個字節。

·         BINARY(M)

BINARY類型相似於CHAR類型,但保存二進制字節字符串而不是非二進制字符串。

·         VARBINARY(M)

VARBINARY類型相似於VARCHAR類型,但保存二進制字節字符串而不是非二進制字符串。

·         TINYBLOB

最大長度爲255(28–1)字節的BLOB列。

·         TINYTEXT

最大長度爲255(28–1)字符的TEXT列。

·         BLOB[(M)]

最大長度爲65,535(216–1)字節的BLOB列。

能夠給出該類型的可選長度M。若是給出,則MySQL將列建立爲最小的但足以容納M字節長的值的BLOB類型。

·         TEXT[(M)]

最大長度爲65,535(216–1)字符的TEXT列。

能夠給出可選長度M。則MySQL將列建立爲最小的但足以容納M字符長的值的TEXT類型。

·         MEDIUMBLOB

最大長度爲16,777,215(224–1)字節的BLOB列。

·         MEDIUMTEXT

最大長度爲16,777,215(224–1)字符的TEXT列。

·         LONGBLOB

最大長度爲4,294,967,295或4GB(232–1)字節的BLOB列。LONGBLOB列的最大有效(容許的)長度取決於客戶端/服務器協議中配置最大包大小和可用的內存。

·         LONGTEXT

最大長度爲4,294,967,295或4GB(232–1)字符的TEXT列。LONGTEXT列的最大有效(容許的)長度取決於客戶端/服務器協議中配置最大包大小和可用的內存。

·         ENUM('value1','value2',...)

枚舉類型。只能有一個值的字符串,從值列'value1','value2',...,NULL中或特殊 ''錯誤值中選出。ENUM列最多能夠有65,535個大相徑庭的值。ENUM值在內部用整數表示。

·         SET('value1','value2',...)

一個設置。字符串對象能夠有零個或多個值,每一個值必須來自列值'value1','value2',...SET列最多能夠有64個成員。SET值在內部用整數表示。

11.2. 數值類型
MySQL支持全部標準SQL數值數據類型。這些類型包括嚴格數值數據類型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數值數據類型(FLOAT、REAL和DOUBLE PRECISION)。關鍵字INT是INTEGER的同義詞,關鍵字DEC是DECIMAL的同義詞。

BIT數據類型保存位字段值,而且支持MyISAM、MEMORY、InnoDB和BDB表。

做爲SQL標準的擴展,MySQL也支持整數類型TINYINT、MEDIUMINT和BIGINT。下面的表顯示了須要的每一個整數類型的存儲和範圍。

類型

字節

最小值

最大值

 

 

(帶符號的/無符號的)

(帶符號的/無符號的)

TINYINT

1

-128

127

 

 

0

255

SMALLINT

2

-32768

32767

 

 

0

65535

MEDIUMINT

3

-8388608

8388607

 

 

0

16777215

INT

4

-2147483648

2147483647

 

 

0

4294967295

BIGINT

8

-9223372036854775808

9223372036854775807

 

 

0

18446744073709551615

MySQL還支持選擇在該類型關鍵字後面的括號內指定整數值的顯示寬度(例如,INT(4))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。

顯示寬度並不限制能夠在列內保存的值的範圍,也不限制超過列的指定寬度的值的顯示。

當結合可選擴展屬性ZEROFILL使用時, 默認補充的空格用零代替。例如,對於聲明爲INT(5) ZEROFILL的列,值4檢索爲00004。請注意若是在整數列保存超過顯示寬度的一個值,當MySQL爲複雜聯接生成臨時表時會遇到問題,由於在這些狀況下MySQL相信數據適合原列寬度。

全部整數類型能夠有一個可選(非標準)屬性UNSIGNED。當你想要在列內只容許非負數和該列須要較大的上限數值範圍時可使用無符號值。

浮點和定點類型也能夠爲UNSIGNED。同數類型,該屬性防止負值保存到列中。然而,與整數類型不一樣的是,列值的上範圍保持不變。

若是爲一個數值列指定ZEROFILL,MySQL自動爲該列添加UNSIGNED屬性。

對於浮點列類型,在MySQL中單精度值使用4個字節,雙精度值使用8個字節。

FLOAT類型用於表示近似數值數據類型。SQL標準容許在關鍵字FLOAT後面的括號內選擇用位指定精度(但不能爲指數範圍)。MySQL還支持可選的只用於肯定存儲大小的精度規定。0到23的精度對應FLOAT列的4字節單精度。24到53的精度對應DOUBLE列的8字節雙精度。

MySQL容許使用非標準語法:FLOAT(M,D)或REAL(M,D)或DOUBLE PRECISION(M,D)。這裏,「(M,D)」表示該值一共顯示M位整數,其中D位位於小數點後面。例如,定義爲FLOAT(7,4)的一個列能夠顯示爲-999.9999。MySQL保存值時進行四捨五入,所以若是在FLOAT(7,4)列內插入999.00009,近似結果是999.0001。

MySQL將DOUBLE視爲DOUBLE PRECISION(非標準擴展)的同義詞。MySQL還將REAL視爲DOUBLE PRECISION(非標準擴展)的同義詞,除非SQL服務器模式包括REAL_AS_FLOAT選項。

爲了保證最大可能的可移植性,須要使用近似數值數據值存儲的代碼應使用FLOAT或DOUBLE PRECISION,不規定精度或位數。

DECIMAL和NUMERIC類型在MySQL中視爲相同的類型。它們用於保存必須爲確切精度的值,例如貨幣數據。當聲明該類型的列時,能夠(而且一般要)指定精度和標度;例如:

salary DECIMAL(5,2)
在該例子中,5是精度,2是標度。精度表示保存值的主要位數,標度表示小數點後面能夠保存的位數。

在MySQL 5.1中以二進制格式保存DECIMAL和NUMERIC值。

標準SQL要求salary列可以用5位整數位和兩位小數保存任何值。所以,在這種狀況下能夠保存在salary列的值的範圍是從-999.99到999.99。

在標準SQL中,語法DECIMAL(M)等價於DECIMAL(M,0)。一樣,語法DECIMAL等價於DECIMAL(M,0),能夠經過計算肯定M的值。在MySQL 5.1中支持DECIMAL和NUMERIC數據類型的變量形式。M默認值是10。

DECIMAL或NUMERIC的最大位數是65,但具體的DECIMAL或NUMERIC列的實際範圍受具體列的精度或標度約束。若是此類列分配的值小數點後面的位數超過指定的標度容許的範圍,值被轉換爲該標度。(具體操做與操做系統有關,但通常結果均被截取到容許的位數)。

BIT數據類型可用來保存位字段值。BIT(M)類型容許存儲M位值。M範圍爲1到64。

要指定位值,可使用b'value'符。value是一個用0和1編寫的二進制值。例如,b'111'和b'100000000'分別表示7和128。參見9.1.5節,「位字段值」。

若是爲BIT(M)列分配的值的長度小於M位,在值的左邊用0填充。例如,爲BIT(6)列分配一個值b'101',其效果與分配b'000101'相同。

當要在一個數值列內保存一個超出該列容許範圍的值時,MySQL的操做取決於此時有效的SQL模式。若是模式未設置,MySQL將值裁剪到範圍的相應端點,並保存裁減好的值。可是,若是模式設置爲traditional(「嚴格模式」),超出範圍的值將被拒絕並提示錯誤,而且根據SQL標準插入會失敗。參見5.3.2節,「SQL服務器模式」。

若是INT列是UNSIGNED,列範圍的大小相同,但其端點會變爲到0和4294967295。若是你試圖保存-9999999999和9999999999,以非嚴格模式保存到列中的值是0和4294967296。

若是在浮點或定點列中分配的值超過指定(或默認)精度和標度規定的範圍,MySQL以非嚴格模式保存表示範圍相應端點的值。

當MySQL沒有工做在嚴格模式時,對於ALTER TABLE、LOAD DATA INFILE、UPDATE和多行INSERT語句,因爲裁剪髮生的轉換將報告爲警告。當MySQL工做在嚴格模式時,這些語句將失敗,而且部分或所有值不會插入或更改,取決因而否表爲事務表和其它因素。詳情參見5.3.2節,「SQL服務器模式」。

11.3. 日期和時間類型
11.3.1. DATETIME、DATE和TIMESTAMP類型
11.3.2. TIME類型
11.3.3. YEAR類型
11.3.4. Y2K事宜和日期類型
表示時間值的DATE和時間類型爲DATETIME、DATE、TIMESTAMP、TIME和YEAR。每一個時間類型有一個有效值範圍和一個「零」值,當指定不合法的MySQL不能表示的值時使用「零」值。TIMESTAMP類型有專有的自動更新特性,將在後面描述。

若是試圖插入一個不合法的日期,MySQL將給出警告或錯誤。可使用ALLOW_INVALID_DATES SQL模式讓MySQL接受某些日期,例如'1999-11-31'。當你想要保存一個「可能錯誤的」用戶已經在數據庫中指定(例如,以web形式)用於未來處理的值時頗有用。在這種模式下,MySQL只驗證月範圍爲從0到12,日範圍爲從0到31。這些範圍能夠包括零,由於MySQL容許在DATE或DATETIME列保存日/月和日是零的日期。這在應用程序須要保存一個你不知道確切日期的生日時很是有用。在這種狀況下,只須要將日期保存爲'1999-00-00'或'1999-01-00'。若是保存此類日期,DATE_SUB()或DATE_ADD等須要完整日期的函數不會獲得正確的結果。(若是你不想在日期中出現零,可使用NO_ZERO_IN_DATE SQL模式)。

MySQL還容許將'0000-00-00'保存爲「僞日期」(若是不使用NO_ZERO_DATE SQL模式)。這在某些狀況下比使用NULL值更方便(而且數據和索引佔用的空間更小)。

將sql_mode系統變量設置爲相應模式值,能夠更確切你想讓MySQL支持哪一種日期。參見5.3.2節,「SQL服務器模式」。

當使用日期和時間類型時應記住如下幾點:

·         MySQL以標準輸出格式檢索給定日期或時間類型的值,但它盡力解釋你指定的各類輸入值格式(例如,當你指定一個分配給或與日期或時間類型進行比較的值時)。只支持下面章節中描述的格式。指望你能提供有效值。若是你使用其它格式的值會發生意想不到的結果。

·         包含兩位年值的日期會使人模糊,由於世紀不知道。MySQL使用如下規則解釋兩位年值:

o        70-99範圍的年值轉換爲1970-1999。

o        00-69範圍的年值轉換爲2000-2069。

·         儘管MySQL嘗試解釋幾種格式的值,日期老是以年-月-日順序(例如,'98-09-04'),而不是其它地方經常使用的月-日-年或日-月-年順序(例如,'09-04-98','04-09-98')。

·         若是值用於數值上下文中,MySQL自動將日期或時間類型的值轉換爲數字,反之亦然。

·         當 MySQL遇到一個日期或時間類型的超出範圍或對於該類型不合法的值時(如本節開始所描述),它將該值轉換爲該類的「零」值。一個例外是超出範圍的TIME值被裁剪到TIME範圍的相應端點。

下面的表顯示了各種「零」值的格式。請注意若是啓用NO_ZERO_DATE SQL模式,使用這些值會產生警告。

列類型

「零」值

DATETIME

'0000-00-00 00:00:00'

DATE

'0000-00-00'

TIMESTAMP

00000000000000

TIME

'00:00:00'

YEAR

0000

·         「零」值是特殊值,但你可使用表內顯示的值顯式保存或引用它們。你也可使用值'0'或0來保存或引用,寫起來更容易。

·         MyODBC中使用的「零」日期或時間值在MyODBC 2.50.12和以上版本中被自動轉換爲NULL,由於ODBC不能處理此類值。
相關文章
相關標籤/搜索