1.整数类型:
整数类型 | 字节 | 最小值 | 最大值 |
TINYINT | 1 | 有符号:-128,无符号:0 |
有符号127,无符号255 |
SMALLINT | 2 | 有符号:-32768,无符号:0 | 有符号:32767,无符号:65535 |
MEDIUMINT | 3 | 有符号:-8388608,无符号:0 | 有符号:8388607,无符号:1677215 |
INT和INTEGER | 4 | 有符号:-2147483648,无符号:0 | 有符号:2147483647,无符号:4294967295 |
BIGINT | 8 | 有符号:-9223372036854775808,无符号:0 | 有符号:9223372036854775807 无符号:18446744073709551615 |
注:可以通过mysql的帮助系统查看各个类型的取值范围:
mysql> help INT Name: 'INT' Description: INT[(M)] [UNSIGNED] [ZEROFILL] A normal-size integer. The signed range is -2147483648 to 2147483647. The unsigned range is 0 to 4294967295. URL: http://dev.mysql.com/doc/refman/5.7/en/numeric-type-overview.html
2. 浮点数类型,定点数类型和位类型
2.1 浮点数类型
浮点数类型 | 字节 | 最小值 | 最大值 |
FLOAT | 4 | ±1.75494351E-38 |
±3.402823466E+38 |
DOUBULE | 8 | ±2.2250738585072014E-308 |
±1.7976931348623157E+308 |
2.2 定点数
定点数 | 字节 | 最小值 | 最大值 |
DEC(M,D)和DECIMAL(M,D) | M+2 | 与DOUBLE相同 | 与DOUBLE相同 |
DEC和DECMIAL两个定点数类型时候同名词,取值范围与DOUBLE相同,但是有效取值大范围有M和D决定。
2.3 位类型
位类型 | 字节数 | 最小值 | 最大值 |
BIT(M) | 1~8 | BIT(1) | BIT(64) |
3. 日期和时间类型
日期和时间类型 | 字节数 | 最小值 | 最大值 |
DATE | 4 | 1000-01-01 | 9999-12-31 |
DATETIME | 8 | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 |
TIMESTAMP | 4 | 19700101080001 | 2038年的某个时刻 |
TIME | 3 | -835:59:59 | 838:59:59 |
YEAR | 1 | 1901 | 2155 |
注意:每种日期和时间数据类型都有一个取值范围,若插入的数据超过该取值范围,则会插入默认值。
各个日期和时间类型的应用场合如下:
(1)如果要表示年月日,一般会使用DATE类型
(2)如果要表示年月日时分秒,一般会使用DATETIME类型
(3)如果需要经常插入或者更新日期为当前系统时间,一般会使用TIMESTAMP类型
(4)如果要表示时分秒,一般用TIME类型
(5)如果要表示年份,一般会用YEAR,因为该类型比DATE类型占有更少的空间
4. 字符串类型
4.1 CHAR系列字符串类型
CHAR系列字符串类型 | 字节 | 描述 |
CHAR(M) | M | M为0~255之间的整数 |
VARCHAR(M) | M | M为0~65535之间的整数 |
存储少量字符串,可以选择CHAR或者VARCHAR,至于选择哪一个,则需要判断所存储字符串长度是否经常变化,如果经常变化,则可以选这VARCHAR,否则选CHAR。
4.2 TEXT系列字符串类型
TEXT系列字符串类型 | 字节 | 描述 |
TINYTEXT | 0~255 | 值的长度为±2个字节 |
TEXT | 0~65535 | 值的长度为±2个字节 |
MEDIUMTEXT | 0~167772150 | 值的长度为±3个字节 |
LONGTEXT | 0~4294967295 | 值的长度为±4个字节 |
如果需要存储大量字符串(例如文章内容的纯文本),则可以选择TEXT系列的字符串。
4.3 BINARY系列字符串类型
BINARY系列字符串类型 | 字节 | 描述 |
BINARY(M) | M | 允许长度为0~M |
VARBINARY(M) | M | 允许长度为0~M |
如上表中两个字符串类型与CHAR字符串类型十分相似,不同的是,前者可以上表中的类型可以存储二进制数据(例如图片,音乐或者视频文件),而后者只能存储字符数据。注意,上表中的字符串类型只适合存储少量的二进制数据,至于选哪一种数据类型进行存储,则需要判断存储的二进制数据是否经常变化,如果经常发生变化可以选择VARBINARY,否则选择BINARY。
4.4 BOLOB系列字符串类型
BLOB系列字符串类型 | 字节 |
TINYBLOB | 0~255 |
BLOB | 0~2^16 |
MEDIUMBLOB | 0~2^24 |
LONGBLOB | 0~2^32 |