前言
数据类型是定义列中可以存储什么类型的数据以及该数据实际怎样存储的基本规则。
限制存储在数据列列中的数据。例如,数值数据类型列只能接受数值类型的的数据。
在设计表时,应该特别重视所用的数据类型。使用错误的数据类型可能会严重地影响应用程序的功能和性能。
目录
- 前言
- 字符串数据类型
- 数值类型
- 有符号或无符号
- 日期和时间类型
- 二进制数据类型
基本常用的数据类型
数据类型:整型、浮点型、字符串、日期等。
字符串数据类型
最常用的数据类型是字符串数据类型。它们存储字符串,如名字、地址、电话号码、邮政编码等。
不管使用何种形式的字符串串数据类型,字符串值都必须括在引号内。
有两种基本的串类型,分别为定长串和变长串:
定长串:char
- 接受长度固定的字符串,其长度是在创建表时指定的。定长列不允许存储多于指定长度字符的数据。
- 指定长度后,就会分配固定的存储空间用于存放数据。
char(10)
不管实际插入多少字符,它都会占用10个字符位置。
变长串:varchar
- 存储可变长度的字符串。
varchar(10)
如果实际插入5个字符,那么它只占5个字符位置,插入的数据长度不能超过10个字符。
注意
既然变长数据类型这样灵活,为什么还要使用定长数据类型?
答:因为性能,MySQL处理定长列远比处理变长列快得多。
数据类型 | 说明 |
char | 1-255个字符的定长串。它的长度必须在创建时指定,否则MySQL假定为char(1) |
enum | 接受最多64K个串组成的一个预定义集合的零个或多个串 |
longtext | 与text相同,但最大长度为4GB |
med iumtext | 与text相同,但最大长度为16K |
set | 接受最多64个串组成的一个预定义集合的零个或多个串 |
text | 最大长度为64K的变长文本(0~65535) |
tinytext | 与text相同,但最大长度为255字节 |
varchar | 长度可变,最多不超过255字节。如果在创建时指定为varchar(n),则可存储0到n个字符的变长串(其中n ≤ 255) |
数值类型
数值数据类型存储数值。MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围。支持的取值范围越大,所需存储空间越多。
与字符串不一样,数值不应该括在引号内。
数据类型 | 说明 |
bit | 位字段,1 ~ 64位。(在MySQL 5之前,bit 在功能上等价于 tinyint ) |
bigint | 整数值,支持 -9223372036854775808 ~ 9223372036854775807 (如果是unsigned,为 0 ~ 18446744073709551615的数) |
boolean(或bool) | 布尔标志,或者为0或者为1,主要用于开/关(on/off) 标志 |
decimal(或dec) | 精度可变的浮点值 |
double | 双精度浮点值 |
float | 单精度浮点值 |
int(或integer) | 整数值,支持 -2147483648 ~ 2147483647 (如果是unsigned,为 0 ~ 4294967295的数) |
mediumint | 整数值,支持 -8388608 ~ 8388607 (如果是unsigned,为0 ~ 16777215 的数) |
real | 4字节的浮点值 |
smallint | 整数值,支持 -32768~ 32767 (如果是unsigned,为0 ~ 65535的数) |
tinyint | 整数值,支持 -128 ~ 127 (如果为unsigned,为0 ~ 255) 的数 |
decimal(5,2)
表示数值总共5位, 小数占2位。tinyint
1字节(8位) 无符号:0-255。有符号:-128,127。int
4字节。 无符号:-21亿,21亿。有符号:0-42亿。
MySQL中没有专门存储货币的数据类型,一般情况下使用decimal(8, 2)
。
有符号或无符号
所有数值数据类型(除bit和boolean外)都可以有符号或无符号。
- 有符号数值列可以存储正或负的数值。
- 无符号数值列只能存储正数。
- 默认情况为有符号,但如果你知道自己不需要存储负值,可以使用
unsigned
关键字。
unsigned
无符号(给数值类型使用,表示为正数,不写可以表示正负数都可以)
注意
如果将邮政编码类似于01234存储为数值类型,则保存的将是数值1234,此时需要使用字符串类型手机号应该用什么进行存储呢?
答:手机号不需要计算,最大值已经超过42亿,所以一般使用char(11)
存储,如果还要加地区号(例如:+86)再加3位或5位就可以。
日期和时间类型
MySQL使用专门的数据类型来存储日期和时间值。
数据类型 | 说明 |
date | 表示1000-01-01 ~ 9999-12-31的日期,格式为 yyyy-MM-dd |
datetime | date 和 time 的组合 |
timestamp | 功能和 datetime 相同(但范围较小) |
time | 格式为 HH:mm:ss |
year | 用2位数字表示, 范围是70 (1970年) ~ 69 (2069年),用4位数字表示,范围是1901年 ~ 2155年 |
datetime
8字节1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
二进制数据类型
二进制数据类型可存储任何数据(甚至包括二进制信息),如图像、多媒体、字处理文档等。
数据类型 | 说明 |
blob | blob最大长度为64 KB |
mediumblob | blob最大长度为16 MB |
longblob | blob最大长度为4 GB |
tinyblob | blob最大长度为255字节 |
通常情况下不会使用二进制数据类型进行,多媒体数据的存储。