mysql数据类型
[toc]
粗谈
粗谈这里不会做详细介绍,仅仅是点到即止,具体详细内容在下面的细谈里再做详细介绍。如果不愿花太多时间,仅仅是想了解个大概可以看粗谈。
mysql的数据类型可三大类:数值型、字符串型和日期时间型
数值型
分整数型和小数型(废话~)
整数型:
tinyint
、smallint
、mediumint
、int
、bigint
小数型:浮点型(
float
、double
)和定点型(decimal
)
字符串型
mysql中的字符串类型有
char
(定长字符串)、varchar
(可变长字符串)、text
(字符串文本)、blob
(二进制文本)、enum
(枚举)、set
(集合)
日期时间型
mysql中的日期时间型有五种:
-
datetime
(年月日时分秒) -
datestamp
(时间戳) -
date
(年月日) -
time
(时分秒) -
year
(年)
据说不如php的时间戳强大~~
细谈
数值型
整数型:
-
tinyint
:占用1个字节 -
smallint
:占用2个字节 -
mediumint
:占用3个字节 -
int
:占用4个字节 -
bigint
:占用8个字节
一般的,tinyint与int较为常用
小数型:
相关用法:float(M,D)
M表示总长度,D表示小数点部分的长度。
mysql>create table mytable(a float(10,2))charset utf8;
double和decimal与此类似;
- 浮点型:
-
float
:占用4个字节,最大有效位为7位左右。 -
double
:占用8个字节,最大有效位为15位左右。
- 定点型:
decimal
浮点型容易丢失精度。因此对精确度高的地方不用浮点型(比如与钱有关的地方),而是用定点型。
字符串型
char
:固定长度字符串。磁盘会分配固定长度的空间去存储数据,如 数据不够长度,空间依然占用。
varchar
:可变长度字符串。会使用1~2个字节来保存实际长度。
text
:字符串文本。可存储64M字节数的文本,要使用10个字节来保存实际长度。
blob
:二进制文本。
enum
:枚举。列出一系列的元素,可以在这些元素中任选一个作为元素的值(单选框)。使用2个字节来保存数据,能够保存65535个数据,是因为枚举实际保存的是数值,而不是字符串本身。
set
:集合。列出一系列的袁术,可以在这些元素中选择一个或多个作为元素的值(复选框)。集合使用8个字符保存数据,和枚举一样保存的是数值,集合定义的数据类型里面出现的元素最多个数为64个。
证明enum和set保存的是数值:
create database mydatabase; -- 创建一个mydatabase数据库
mysql> use mydatabase; -- 进入mydatabase数据库中
-- 创建一个mytable表
create table mytable(
animal enum('猫','狗','猪') -- enum类型animal列
)charset utf8;
insert into mytable values('狗'); -- 插入数据
select animal + 0 from mytable; -- 用数学运算讲其显示。
其他:
char
与varchar
的使用:
- 所有字符串长度必须小于255
- 如果字符串长度固定,那么使用char;否则使用varchar
- char效率高,varchar节省空间
enum
和set
都保存的是数值而不是字符串,因此较为节省空间。插入时也能够使用数值插入。
日期时间型
-
datatime
:表示年月日 时分秒,占用8个字节。 -
datastamp
:时间戳,使用标准整型存储,实际却是年月日 时分秒,占用4个字节。 -
data
:表示年月日,占用3个字节。 -
time
:时间部分,表示一个时间段,占用3个字节。 -
year
:年,占用1个字节。
附:在mysql中,任意一条记录,所有字段的集合的长度不超过65535个字节。所有的字段没有全部不允许null,那么null会占用一个字节来保存。