在设计数据库表时,其中一项重要步骤即是选择表中字段的数据类型。
若是你选择的是mysql做为数据库,必需要清楚mysql到底支持哪些数据类型呢?
整体来讲包括数值型、字符串类型、日期和时间类型这么几大类。mysql
数值类型中又细分为整数类型、浮点数类型、定点数类型和位类型。下面分别述之。sql
整数类型 | 占用字节 | 范围 |
---|---|---|
TINYINT | 1 | 有符号:[-128,127] 或无符号:[0,255] |
SMALLINT | 2 | 有符号:[-32768,32767]或无符号:[0,65535] |
MEDIUMINT | 3 | 有符号:[-8333608,8388607]或无符号:[0,1677215] |
INT、INTEGER | 4 | 有符号:[-21亿多,21亿多]或无符号:[0,42亿多] |
BIGINT | 8 | 很大,19位数字的范围 |
记住mysql的整数类型有5种,分别是tinyint、smallint、mediumint、int和bigint。
另外还有两个特性:数据库
浮点数类型 | 字节 | 范围 |
---|---|---|
FLOAT | 4 | [1.175494351E-38,3.402823466E+38] |
DOUBLE | 8 | [2.2..E-308,1.7...E+308] |
定点数类型 | 字节 | 范围 |
---|---|---|
DECIMAL(M,D) | M+2 | 最大取值范围与DOUBLE相同,有效范围由M,D决定 |
位类型 | 字节 | 范围 |
---|---|---|
BIT(M) | 1-8 | 最小值BIT(1),最大值BIT(64) |
浮点数和定点数均可以用(M,D)的方式来进行表示。
(M,D)表示该值一共显示M位数字(整数位+小数位),其中D位位于小数点后面。函数
MySQL中提供了多种对字符数据的存储类型,不一样版本可能有所差别,本文以5.0版本为例。设计
字符串类型 | 描述 |
---|---|
CHAR(M) | M为0-255之间的整数 |
VARCHAR(M) | M为0-65535之间的整数 |
TINYBLOB | 容许0-255字节 |
BLOB | 容许0-65535字节 |
MEDIUBLOB | 容许0-167772150字节 |
LONGBLOB | 容许0-4294967295字节 |
TINYTEXT | 容许0-255字节 |
TEXT | 容许0-65535字节 |
MEDIUMTEXT | 容许0-167772150字节 |
LONGTEXT | 容许0-4294967295字节 |
VARBINARY(M) | 容许长度0-M个字节的边长字节字符串 |
BINARY(M) | 容许0-M个字节的定长字节字符串 |
CHAR和VARCHAR很相似,都用来保存mysql中较短的字符串。两者的主要区别在于存储方式不一样:code
好比存储字符串“abc”,CHAR(5)占用了5个字节,而VARCHAR(5)占用3个字节。字符串
分类:table
日期时间类型 | 字节 | 范围 |
---|---|---|
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 | -838:59:59到838:59:59 |
YEAR | 1 | 1901到2155 |
注意TIMESTAMP有一个特色就是和时区相关。当插入日期时,会先转换为本地时区后存放;而从数据库里面取出时,也一样须要将日期转换为本地时区后显示。
查看当前时区的SQL:
show variables like 'time_zone';
class