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支持幾種類類型,每種類型里又有若干種類別:numeric types, date and time types, and string (character) types. 本章首先概覽這些列類型,然后給出詳細的介紹。
MySQL 5.0 支持處理空間數(shù)據(jù)的擴展。有關(guān)空間類型見: Chapter 17, Spatial Extensions in MySQL.
一些列類型描述使用如下約定:
M
表示最大長度。最大的合法的顯示長度是255。
D
用于浮點類型和定點類型,表示小數(shù)點之后的數(shù)字位數(shù)。最大可能值是30,但是最好不要超過M-2.
11.1. Column Type Overview
下面是數(shù)字類型的總結(jié)。詳細信息見: Section 11.2, “Numeric Types”. 列的存儲要求見: Section 11.5, “Column Type Storage Requirements”.
如果你給數(shù)字列指定了 ZEROFILL, MySQL會自動給這個列賦屬性值為UNSIGNED.
SERIAL 是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的別名。
整數(shù)列的定義中SERIAL DEFAULT VALUE 是 NOT NULL AUTO_INCREMENT UNIQUE的別名.
警告: 當你在兩個整數(shù)值之間使用減法運算時,如果一個是UNSIGNED類型,那么結(jié)果是UNSIGNED類型。見:Section 12.8, “Cast Functions and Operators”.
A bit-field type. M 表示每個值的bit數(shù),從1到64。默認是1。
這個數(shù)值類型在 MySQL
一個很小的整數(shù)。其有符號值的范圍是 -128 到 127. 無符號值的范圍是 0 255.
他們是 TINYINT(1)的同義詞。0值認為是false。非0值認為是true.
In the future, full boolean type handling will be introduced in accordance with standard SQL.
小整數(shù)。有符號值的范圍是-32768 to 3276.。無符號值的范圍是0 to 65535。
中等大?。?span>medium-size)的整數(shù)。有符號值的范圍是-8388608 to 8388607。無符號值的范圍是0 to 16777215。
一般大?。?span>normal-size)的整數(shù). The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295.
是 INT的同義詞。
一個大整數(shù)。有符號值的范圍是-9223372036854775808 to 9223372036854775807。無符號值的范圍是0 to 18446744073709551615。.
對于BIGINT列,你應(yīng)該注意以下問題:
MySQL 5.0 在下列情況下可以處理BIGINT:
小的(單精度)的數(shù)字。范圍是-3.402823466E+38 到 -1.175494351E-38, 0, 和 1.175494351E-38 到 3.402823466E+38.這些是基于IEEE標準的理論上的限制。實際的范圍可能稍微小些,這取決于你的硬件和操作系統(tǒng)。
M 是小說的總位數(shù)。 D是小數(shù)點之后的數(shù)字位數(shù)。如果M和D漏寫了,那么缺省的限制是你的硬件決定的。單精度的浮點數(shù)精確到大約小數(shù)點后7位。
如果指定UNSIGNED ,是不允許有負值的。
使用 FLOAT可能會產(chǎn)生預(yù)想不到的結(jié)果,因為所有MySQL中的計算都是按照雙精度計算的。見: Section A.5.7, “Solving Problems with No Matching Rows”.
一般大大?。p精度)的浮點數(shù)。范圍是-1.7976931348623157E+308 到-2.2250738585072014E-308, 0, 和2.2250738585072014E-308 到 1.7976931348623157E+308.這些是理論上的限制。實際情況取決于你的硬件和操作系統(tǒng)。
M 是小數(shù)的總位數(shù)。D是小數(shù)點后的數(shù)字位數(shù)。 如果M和D漏寫了,那么這個限制由你的硬件決定。一個雙精度的浮點數(shù)精確到小數(shù)點后15位。
如果指定 UNSIGNED 則不允許有負值。
是 DOUBLE的同意詞。異常:如果服務(wù)器的SQL模式包括 REAL_AS_FLOAT 選項, REAL 是 FLOAT 而非 DOUBLE的同義詞。
浮點數(shù)。p 表示bit的精確位。但是 MySQL 只是使用這個值來確定是否給結(jié)果列一個FLOAT或DOUBLE值。如果 p 是0到24,數(shù)值類型成為FLOAT,沒有D或D值。如果p 是25到53,則數(shù)值類型為DOUBLE,沒有M或D。
FLOAT(p) 語法是用來解決ODBC兼容的。
MySQL
A packed “exact” fixed-point number. M 是小數(shù)的總位數(shù)(the precision) , D 是小數(shù)點之后的數(shù)字位數(shù)。小數(shù)點和負號 ‘-’ 不包括在 M.中。如果 D 是 0, 值沒有小說點或小說部分。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.
時間類型如下。詳見: Section 11.3, “Date and Time Types”. 存儲要求見: Section 11.5, “Column Type Storage Requirements”.
日期. 范圍是 ‘
日期和時間的結(jié)合. 范圍是 ‘1000-01-01 00:00:00‘ 到 ‘9999-12-31 23:59:59‘. MySQL 用格式‘YYYY-MM-DD HH:MM:SS‘表示DATETIME, 但是允許你使用數(shù)值或字符串給DATETIME賦值。
A timestamp. 范圍是 ‘1970-01-01 00:00:00‘ 到 partway through the year 2037.
TIMESTAMP 列對于記錄INSERT或UPDATE操作的時間和日期的記錄是很有用的。如果你沒有指定值,那么表格中的第一個 TIMESTAMP 列制動設(shè)置為最近操作過的日期和時間。你也可以通過給它指定一個NULL值來為TIMESTAMP列設(shè)置一個當前日期和時間。 .
MySQL 5.0中, TIMESTAMP作為一個格式為‘YYYY-MM-DD HH:MM:SS‘的字符串返回。 其顯示寬度為19個字符。如果你想要取得其數(shù)字值,你應(yīng)該加+0到timestamp列上。
A time. 范圍是 ‘-838:59:59‘到 ‘838:59:59‘. MySQL 以格式‘HH:MM:SS‘顯示TIME ,但是允許你使用字符串或數(shù)字來給TIME指定值。
格式為2個或4個數(shù)字的年。默認是4個數(shù)字格式。在4個數(shù)字的格式中,其范圍是1901到2155和0000。2個數(shù)字的格式的范圍是70到69,表示1970到2069年。MySQL 以格式YYYY表示年,但是允許使用字符串或數(shù)字來指定年值。
字符串列的類型如下。詳細信息見: Section 11.4, “String Types”. 存儲要求見 in Section 11.5, “Column Type Storage Requirements”.
I有時,MySQL可以把一個string列轉(zhuǎn)換為不同的類型。詳見: Section 13.1.5.1, “Silent Column Specification Changes”.
MySQL 5.0 中的string數(shù)據(jù)類型有以前的4.1版本不同的性質(zhì):
許多字符串數(shù)據(jù)類型的列定義包括指定字符集的屬性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
· );
這個表定義了一個字符集為utf8的名為c1的列,一個字符集為latin1且二進制校驗該集合的名為c2的列。二進制校驗大小寫敏感。
更多有關(guān)MySQL 5.0字符集合的信息見: Chapter 10, Character Set Support.
固定長度的字符串,存儲時通常是右填充的。M 表示列的長度。MySQL 5.0中范圍是0到255。
注意: 當讀取CHAR值時,末尾的空格被移除。
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的縮寫。 NATIONAL CHAR (或其等價形式 NCHAR) 是標準的定義CHAR 列的SQL 方式,且應(yīng)使用默認字符集。. 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.
列類型 CHAR BYTE 是 CHAR BINARY的別名. This is a compatibility feature.
ASCII 屬性可以指定給CHAR。它指定latin1字符集。
MySQL 5.0中UNICODE屬性可以指定給CHAR。 它指定了ucs2字符集。
MySQL 允許創(chuàng)建一個類型為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: 一個不被指定為NULL的 CHAR(0) 列只占有一個bit,并且只可以賦值為NULL或 ’’。.
等價于CHAR(1).
可變長度的字符串。M 表示列的最大長度。. MySQL
Note: Before
Previus to MySQL
VARCHAR 是 CHARACTER VARYING 的縮寫。
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 類似于CHAR ,單存儲的是byte字符串而不是非byte字符串。
The VARBINARY 類似于 VARCHAR ,但是存儲的是byte字符串,而不是非byte字符串。
BLOB列的最大長度是255 (28 – 1) bytes.
TEXT 列的最大長度是255 (28 – 1) characters.
BLOB 最大長度是 65,535 (216 – 1) bytes.
MySQL 5.0中可選長度 M 也可以這種類型給出。 如果這樣做了,那么 MySQL將創(chuàng)建最小的BLOG類型來存儲M byte值。
TEXT[(M)]
TEXT 最大長度 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列最大長度 16,777,215 (224 – 1) bytes.
TEXT 列最大長度16,777,215 (224 – 1) characters.
BLOB 列最大長度 4,294,967,295 or 4GB (232 – 1) bytes. LONGBLOG的最大有效長度取決于客戶/服務(wù)器協(xié)議和可用的寄存器的最大包的大小。 effective (permitted) length of LONGBLOB columns depends on the configured maximum packet size in the client/server protocol and available memory.
TEXT 列的最大長度是 4,294,967,295 or 4GB (232 – 1) characters. 最大有效長度取決于客戶/服務(wù)器協(xié)議和可用的寄存器的最大包的大小。effective (permitted) length of LONGTEXT columns depends on the configured maximum packet size in the client/server protocol and available memory.
枚舉類型。一個字符串對象只能右一個值,且必須是‘value1‘, ‘value2‘, ...其中的一個。NULL 或?qū)S玫?span> ‘‘ 錯誤值。 ENUM 列可以右最多65,535 個互斥值。 ENUM 值是用內(nèi)部的整數(shù)表示的。
集合。一個字符串對象有一個或多個值。每一必須從‘value1‘, ‘value2‘, ...中選擇。SET 列最多有64個元素。SET 值在內(nèi)部是用整數(shù)表示的。