Table of Contents
11.1.1. Overview of Numeric Types
11.1.2. Overview of Date and Time Types
11.1.3. Overview of String Types
11.3.1. The DATETIME, DATE, and TIMESTAMP Types
11.3.4. Y2K Issues and Date Types
11.4.1. The CHAR and VARCHAR Types
11.4.2. The BINARY and VARBINARY Types
11.4.3. The BLOB and TEXT Types
11.5. Column Type Storage Requirements
11.6. Choosing the Right Type for a Column
11.7. Using Column Types from Other Database Engines
MySQL支持幾種類(lèi)類(lèi)型,每種類(lèi)型里又有若干種類(lèi)別:numeric types, date and time types, and string (character) types. 本章首先概覽這些列類(lèi)型,然后給出詳細的介紹。
MySQL 5.0 支持處理空間數據的擴展。有關(guān)空間類(lèi)型見(jiàn): Chapter 17, Spatial Extensions in MySQL.
一些列類(lèi)型描述使用如下約定:
M
表示最大長(cháng)度。最大的合法的顯示長(cháng)度是255。
D
用于浮點(diǎn)類(lèi)型和定點(diǎn)類(lèi)型,表示小數點(diǎn)之后的數字位數。最大可能值是30,但是最好不要超過(guò)M-2.
11.1. Column Type Overview
下面是數字類(lèi)型的總結。詳細信息見(jiàn): Section 11.2, “Numeric Types”. 列的存儲要求見(jiàn): Section 11.5, “Column Type Storage Requirements”.
如果你給數字列指定了 ZEROFILL, MySQL會(huì )自動(dòng)給這個(gè)列賦屬性值為UNSIGNED.
SERIAL 是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的別名。
整數列的定義中SERIAL DEFAULT VALUE 是 NOT NULL AUTO_INCREMENT UNIQUE的別名.
警告: 當你在兩個(gè)整數值之間使用減法運算時(shí),如果一個(gè)是UNSIGNED類(lèi)型,那么結果是UNSIGNED類(lèi)型。見(jiàn):Section 12.8, “Cast Functions and Operators”.
A bit-field type. M 表示每個(gè)值的bit數,從1到64。默認是1。
這個(gè)數值類(lèi)型在 MySQL
一個(gè)很小的整數。其有符號值的范圍是 -128 到 127. 無(wú)符號值的范圍是 0 255.
他們是 TINYINT(1)的同義詞。0值認為是false。非0值認為是true.
In the future, full boolean type handling will be introduced in accordance with standard SQL.
小整數。有符號值的范圍是-32768 to 3276.。無(wú)符號值的范圍是0 to 65535。
中等大?。?span>medium-size)的整數。有符號值的范圍是-8388608 to 8388607。無(wú)符號值的范圍是0 to 16777215。
一般大?。?span>normal-size)的整數. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.
是 INT的同義詞。
一個(gè)大整數。有符號值的范圍是-9223372036854775808 to 9223372036854775807。無(wú)符號值的范圍是0 to 18446744073709551615。.
對于BIGINT列,你應該注意以下問(wèn)題:
MySQL 5.0 在下列情況下可以處理BIGINT:
小的(單精度)的數字。范圍是-3.402823466E+38 到 -1.175494351E-38, 0, 和 1.175494351E-38 到 3.402823466E+38.這些是基于IEEE標準的理論上的限制。實(shí)際的范圍可能稍微小些,這取決于你的硬件和操作系統。
M 是小說(shuō)的總位數。 D是小數點(diǎn)之后的數字位數。如果M和D漏寫(xiě)了,那么缺省的限制是你的硬件決定的。單精度的浮點(diǎn)數精確到大約小數點(diǎn)后7位。
如果指定UNSIGNED ,是不允許有負值的。
使用 FLOAT可能會(huì )產(chǎn)生預想不到的結果,因為所有MySQL中的計算都是按照雙精度計算的。見(jiàn): Section A.5.7, “Solving Problems with No Matching Rows”.
一般大大?。p精度)的浮點(diǎn)數。范圍是-1.7976931348623157E+308 到-2.2250738585072014E-308, 0, 和2.2250738585072014E-308 到 1.7976931348623157E+308.這些是理論上的限制。實(shí)際情況取決于你的硬件和操作系統。
M 是小數的總位數。D是小數點(diǎn)后的數字位數。 如果M和D漏寫(xiě)了,那么這個(gè)限制由你的硬件決定。一個(gè)雙精度的浮點(diǎn)數精確到小數點(diǎn)后15位。
如果指定 UNSIGNED 則不允許有負值。
是 DOUBLE的同意詞。異常:如果服務(wù)器的SQL模式包括 REAL_AS_FLOAT 選項, REAL 是 FLOAT 而非 DOUBLE的同義詞。
浮點(diǎn)數。p 表示bit的精確位。但是 MySQL 只是使用這個(gè)值來(lái)確定是否給結果列一個(gè)FLOAT或DOUBLE值。如果 p 是0到24,數值類(lèi)型成為FLOAT,沒(méi)有D或D值。如果p 是25到53,則數值類(lèi)型為DOUBLE,沒(méi)有M或D。
FLOAT(p) 語(yǔ)法是用來(lái)解決ODBC兼容的。
MySQL
A packed “exact” fixed-point number. M 是小數的總位數(the precision) , D 是小數點(diǎn)之后的數字位數。小數點(diǎn)和負號 ‘-’ 不包括在 M.中。如果 D 是 0, 值沒(méi)有小說(shuō)點(diǎn)或小說(shuō)部分。DECIMAL中最大的(M)是 65 (64 from
如果指定UNSIGNED 就不允許有負值。
DECIMAL列的所有基本的計算 (+, -, *, /) 都是65位精度的。
MySQL
An unpacked fixed-point number. Behaves like a CHAR column; “unpacked” means the number is stored as a string, using one character for each digit of the value. M is the total number of digits and D is the number of digits after the decimal point. The decimal point and (for negative numbers) the ‘-’ sign are not counted in M, although space for them is reserved. If D is 0, values have no decimal point or fractional part. The maximum range of DECIMAL values is the same as for DOUBLE, but the actual range for a given DECIMAL column may be constrained by the choice of M and D. If D is omitted, the default is 0. If M is omitted, the default is 10.
If UNSIGNED is specified, negative values are disallowed.
都是DECIMAL的同義詞。 The FIXED synonym is available for compatibility with other servers.
時(shí)間類(lèi)型如下。詳見(jiàn): Section 11.3, “Date and Time Types”. 存儲要求見(jiàn): Section 11.5, “Column Type Storage Requirements”.
日期. 范圍是 ‘
日期和時(shí)間的結合. 范圍是 ‘1000-01-01 00:00:00‘ 到 ‘9999-12-31 23:59:59‘. MySQL 用格式‘YYYY-MM-DD HH:MM:SS‘表示DATETIME, 但是允許你使用數值或字符串給DATETIME賦值。
A timestamp. 范圍是 ‘1970-01-01 00:00:00‘ 到 partway through the year 2037.
TIMESTAMP 列對于記錄INSERT或UPDATE操作的時(shí)間和日期的記錄是很有用的。如果你沒(méi)有指定值,那么表格中的第一個(gè) TIMESTAMP 列制動(dòng)設置為最近操作過(guò)的日期和時(shí)間。你也可以通過(guò)給它指定一個(gè)NULL值來(lái)為TIMESTAMP列設置一個(gè)當前日期和時(shí)間。 .
MySQL 5.0中, TIMESTAMP作為一個(gè)格式為‘YYYY-MM-DD HH:MM:SS‘的字符串返回。 其顯示寬度為19個(gè)字符。如果你想要取得其數字值,你應該加+0到timestamp列上。
A time. 范圍是 ‘-838:59:59‘到 ‘838:59:59‘. MySQL 以格式‘HH:MM:SS‘顯示TIME ,但是允許你使用字符串或數字來(lái)給TIME指定值。
格式為2個(gè)或4個(gè)數字的年。默認是4個(gè)數字格式。在4個(gè)數字的格式中,其范圍是1901到2155和0000。2個(gè)數字的格式的范圍是70到69,表示1970到2069年。MySQL 以格式YYYY表示年,但是允許使用字符串或數字來(lái)指定年值。
字符串列的類(lèi)型如下。詳細信息見(jiàn): Section 11.4, “String Types”. 存儲要求見(jiàn) in Section 11.5, “Column Type Storage Requirements”.
I有時(shí),MySQL可以把一個(gè)string列轉換為不同的類(lèi)型。詳見(jiàn): Section 13.1.5.1, “Silent Column Specification Changes”.
MySQL 5.0 中的string數據類(lèi)型有以前的4.1版本不同的性質(zhì):
許多字符串數據類(lèi)型的列定義包括指定字符集的屬性CHARACTER SET ,可選,校驗. (CHARSET 是 CHARACTER SET的同義詞。) 這些屬性也適用于 CHAR, VARCHAR, the TEXT types, ENUM, and SET. 如:
· CREATE TABLE t
· (
· c1 CHAR(20) CHARACTER SET utf8,
· c2 CHAR(20) CHARACTER SET latin1 COLLATE latin1_bin
· );
這個(gè)表定義了一個(gè)字符集為utf8的名為c1的列,一個(gè)字符集為latin1且二進(jìn)制校驗該集合的名為c2的列。二進(jìn)制校驗大小寫(xiě)敏感。
更多有關(guān)MySQL 5.0字符集合的信息見(jiàn): Chapter 10, Character Set Support.
固定長(cháng)度的字符串,存儲時(shí)通常是右填充的。M 表示列的長(cháng)度。MySQL 5.0中范圍是0到255。
注意: 當讀取CHAR值時(shí),末尾的空格被移除。
Before MySQL
MySQL
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的縮寫(xiě)。 NATIONAL CHAR (或其等價(jià)形式 NCHAR) 是標準的定義CHAR 列的SQL 方式,且應使用默認字符集。. This is the default in MySQL.
BINARY 屬性是attribute is shorthand for specifying the binary collation of the column character set. Sorting and comparison is based on numeric character values.
列類(lèi)型 CHAR BYTE 是 CHAR BINARY的別名. This is a compatibility feature.
ASCII 屬性可以指定給CHAR。它指定latin1字符集。
MySQL 5.0中UNICODE屬性可以指定給CHAR。 它指定了ucs2字符集。
MySQL 允許創(chuàng )建一個(gè)類(lèi)型為CHAR(0)的列。This is mainly useful when you have to be compliant with some old applications that depend on the existence of a column but that do not actually use the value. This is also quite nice when you need a column that can take only two values: 一個(gè)不被指定為NULL的 CHAR(0) 列只占有一個(gè)bit,并且只可以賦值為NULL或 ’’。.
等價(jià)于CHAR(1).
可變長(cháng)度的字符串。M 表示列的最大長(cháng)度。. MySQL
Note: Before
Previus to MySQL
VARCHAR 是 CHARACTER VARYING 的縮寫(xiě)。
In MySQL 5.0, the BINARY attribute is shorthand for specifying the binary collation of the column character set. Sorting and comparison is based on numeric character values.
Starting from MySQL
BINARY 類(lèi)似于CHAR ,單存儲的是byte字符串而不是非byte字符串。
The VARBINARY 類(lèi)似于 VARCHAR ,但是存儲的是byte字符串,而不是非byte字符串。
BLOB列的最大長(cháng)度是255 (28 – 1) bytes.
TEXT 列的最大長(cháng)度是255 (28 – 1) characters.
BLOB 最大長(cháng)度是 65,535 (216 – 1) bytes.
MySQL 5.0中可選長(cháng)度 M 也可以這種類(lèi)型給出。 如果這樣做了,那么 MySQL將創(chuàng )建最小的BLOG類(lèi)型來(lái)存儲M byte值。
TEXT[(M)]
TEXT 最大長(cháng)度 65,535 (216 – 1) characters.
In MySQL 5.0, an optional length M can be given. Then MySQL will create the column as the smallest TEXT type large enough to hold values M characters long.
BLOB列最大長(cháng)度 16,777,215 (224 – 1) bytes.
TEXT 列最大長(cháng)度16,777,215 (224 – 1) characters.
BLOB 列最大長(cháng)度 4,294,967,295 or 4GB (232 – 1) bytes. LONGBLOG的最大有效長(cháng)度取決于客戶(hù)/服務(wù)器協(xié)議和可用的寄存器的最大包的大小。 effective (permitted) length of LONGBLOB columns depends on the configured maximum packet size in the client/server protocol and available memory.
TEXT 列的最大長(cháng)度是 4,294,967,295 or 4GB (232 – 1) characters. 最大有效長(cháng)度取決于客戶(hù)/服務(wù)器協(xié)議和可用的寄存器的最大包的大小。effective (permitted) length of LONGTEXT columns depends on the configured maximum packet size in the client/server protocol and available memory.
枚舉類(lèi)型。一個(gè)字符串對象只能右一個(gè)值,且必須是‘value1‘, ‘value2‘, ...其中的一個(gè)。NULL 或專(zhuān)用的 ‘‘ 錯誤值。 ENUM 列可以右最多65,535 個(gè)互斥值。 ENUM 值是用內部的整數表示的。
集合。一個(gè)字符串對象有一個(gè)或多個(gè)值。每一必須從‘value1‘, ‘value2‘, ...中選擇。SET 列最多有64個(gè)元素。SET 值在內部是用整數表示的。
聯(lián)系客服