mysql数据类型

来源:互联网 发布:rar在mac怎么打开 编辑:程序博客网 时间:2024/06/05 02:58

几个简单的原则:

1.更小的通常更好:在能够满足要求的情况下,越小性能越高

2.简单就好:简单的数据类型操作更为容易,例如整型比字符串操作更为容易

3.尽量避免使用NULL:如果不需要NULL,最好指定为NOT NULL


整数类型

TINYINT ,SMALLINT,MEDIUMINT,INT,BIGINT分别使用8, 16,24,32,64位存储。其中这些类型都可以声明为unsigned类型,表示不允许负值,可以使正数的上限提高一倍。

注:在MYSQL中可以为正数类型指定宽度,例如INT(11),他不会限制存储的范围,只是用来显示字符个数


实数类型

实数不仅仅用来存储小数部分,也可以用来存储比BIGINT还大的整数。

FLOAT和DOUBLE用户近似计算

DECIMAL用于存储精确小数


字符串类型

VARCHAR类型用于存储可变长的字符串。他比定长类型节省空间,他仅仅使用必要的空间。VARCHAR使用1个或者2个存储字符串的长度。因为update时可能出现行比原来的行更长,导致页内没有更多空间存储,InnoDB的处理方式是分裂页,使行可以存储到页内。

VARCHAR适用的场合:列的更新很少;每个存储都使用不同的字节数进行存储,存储的内容是变长的。

CHAR类型是定长的,Mysql根据字符串长度分配足够的空间,并且使用空格填充不足,所以字符串后面的空格会被删除。

CHAR适用于定长的字符串,和较短的字符串

注:varchar(5)和varchar(200)在存储字符串“abcd”是一样的。但是建议用更短的字符串,因为在内存中,varchar会分配定义时的长度来分配内存大小。也就是说更长的列在内存中消耗更多,所以用较小的长度较好。

BLOB和TEXT类型

这两种类型都是为了存储很大的数据而设计的字符串数据类型。TEXT属于字符类型,BLOB对应的是二进制类型。MYSQL会将BLOB和TEXT值当做一个独立的对象进行处理。

使用枚举(ENUM)代替字符串类型

可以使用枚举列代替字符串类型。枚举列可以将一些不重复的字符串存储成一个预定义的集合。MySQL在存储枚举时会很紧凑,节省存储的空间。

create table enum_test(e ENUM('fish','apple','dog')not null);//建表

insert into enum_test values('fish'),('dog'),('apple');//插入数据

这三行实际存储的是整数不是字符串

select e +0 from enum_test ;

+------+
| e +0 |
+------+
|    1 |
|    3 |
|    2 |
+------+

并且如果排序输入时,是按照整数排序而不是字符串进行排序

select e from enum_test order by e;

+-------+
| e     |
+-------+
| fish  |
| apple |
| dog   |
+-------+


0 0
原创粉丝点击