首页 > SQL学习 > SQL基础知识 > SQL中常用数据类型
2016
12-16

SQL中常用数据类型

MySQL支持的数据类型:数值类型、日期类型、字符串类型

数值类型:

  一、整数类型:

1、tinyint、smallint、mediumint、int和bigint

tinyint:字节:1;正负127(负数字加1)(有符号),无符号范围为从零到乘2加1.

smallint:字节:2;正负32767;

mediumint:字节:3;正负8388607

int、integer:字节:正负2147483647

bigint:字节:8;正负9223372036854775807

2、unsigned:指定该整数类型为无符号

例:int unsigned;

3、zerofill属性:配合int(数字)来用,表示显示宽度,如指定该属性,默认类型为unsigned:

例:int(5) zerofill;

4、auto_increment:自增(默认从1开始),每次自增为该字段中最大数字加1

例:create table 表名(字段名1 类型 auto_increment,....,primary key(字段名1));

在以后插入数据时不许要指定该字段名,该字段名自增(也可以指定)。

5、主键:可以唯一标识某条记录的一个字段或者多个字段

设置方法:

在创建表的时候

create table 表名(字段名称 类型 primary key,....);

或者:create table 表名(字段名称1 类型,....,primary key(字段名称1));

如果忘了设置可以alter table 表名 add primary key(字段名);

删除:

alter table 表名 drop primary key;

注意:如果字段具有auto_increment属性必须先删除auto_increment属性。

6、设置默认值:字段名 类型 default 值

设置not null:字段名 类型 not null

二、小数类型:浮点数和定点数。

1、浮点数:包括float(单精度)和double(双精度)。

float:单精度的浮点数精确到大约7位小数位(整数部分加上小数部分的位数)

double:双精度的浮点数精确到大约15位小数位(整数部分加上小数部分的位数)

2、定点数:只有decimal一种类型。是以字符串形式存入数据库中,比较精准。

(M,D),定义小数类型时后面加上表示该数值整数部分加小数部分一共最多M个数,小数点后最多D个数,decimal不 指定的情况下默认(10,0)。

日期类型:

date 字节:4 最小值:1000-01-01 最大值:9999-12-31

datetime 字节:8 最小值:1000-01-01 00:00:00 最大值:9999-12-31 23:59:59

time 字节:3 最小值:-838:59:59 最大值:838:59:59

year 字节:1 最小值:1901 最大值:2155

datetime是常用的日期类型

create table 表(字段 datetime);

insert into 表(字段) values(now());

PHP实际开发中通常用int类型保存当前Unix时间戳time(),然后用date()等函数格式化时间。

字符串类型

char(M) M为0~255整数,表示可存M个字符(不管是中文还是英文字符总共个数是M个就OK)

varchar(M) M为0~65535整数,表示可以存M个字符,具体M最大多大和字符集有密切关系

tinytext 允许长度0~255字符

text 允许长度0~65535字符

mediumtext 允许长度0~16,777,215字符

longtext 允许长度0~4,294,967,295字符

binary(M) 允许长度0~M个字节的定长字节字符串

(类似于CHAR类型,但保存二进制字节字符串)

varbinary(M) 允许长度0~M个字节的变长字节字符串类型

类似于VARCHAR类型,但保存二进制字节字符串

tinyblob 允许长度0~255字节的BLOB列(保存二进制字节字符串)

blob 允许长度0~65535字节的BLOB列(保存二进制字节字符串)

mediumblob 允许长度0~167772150字节的BLOB列(保存二进制字节字符串)

longblob 允许长度0~4294967295字节的BLOB列(保存二进制字节字符串)

enum 枚举类型

set SET类型

1、char和varchar:

varchar最大存储空间是65,532字节,如果是英文字符集(一个英文字符占1个字节)就是可以放65532个英文字符

char与varchar列的区别:

char类型的字符所占的存储空间是固定,不管你用的时候存了几个字符,它所占的空间都是你当初设定的字符空间

比如char(255) 哪怕你存的只是1个a,那么它也是站255个字符长度的空间!

varchar列所占的存储空间是可变的,根据存入的字符长度来确定实际占多少的空间!

varchar(255) 实际所占的空间就是实际字符的长度+1个字节!

varchar(超过255) 实际所占的空间就是实际字符的长度+2个字节!

在检索时,char列删除尾部的空格,而varchar则保留这些空格。

选择:由于char是固定长度,所以它的处理速度比varchar快,但是缺点是浪费存储空间。所以对于那些长度变化不大的数据可以选择此列

2、enum:枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对1~255个成员的枚举需要1个字节存储;对于255~65535个成员,需要2个

字节存储。最多有65535个成员。

create table 表(字段 enum('a','b',...));

enum类型里存储数据忽略大小写,enum类型只允许从值集合中选取单个值,而不能一次取多个值

3、set:set和enum类型类似,也是一个字符串对象,里面可以包含0~64个成员。

根据成员的不同,存储上也有所不同。

1~8成员的集合,占1个字节

9~16成员的集合,占2个字节

17~24成员的集合,占3个字节

25~32成员的集合,占4个字节

33~64成员的集合,占8个字节

create table 表(字段 set('a','b',...));

SET类型可以从允许值集合中选择任意1个或多元素进行组合,所以对于输出的值只要在允许的组合范围内,都可以正确地注入到set类型的列中。

对于超出允许值范围的值,将不允许注入,对于包含重复的成员的集合将只取一次进行注入。

使用find_in_set函数对set类型的数据进行查询是比较好的选择!

例:select * from 表1 where find_in_set('值1',字段1)

表示返回字段1中包含值1的表1的数据,字段1需要是set类型。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。