数值类型
MySQL中的数据类型
MySQL支持在类型名称后面的小括号内指定显示宽度,
如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度。
如果不显示指定宽度,则默认为int(11)
zerofill
属性是给存储的数值前面自动填充0.但是int(5)并没有在宽度小于5位的时候填充0,只有在明确修改表并使用zerofill参数时才起作用
create table t2(id int,id2 int(5))
insert into t2 VALUES(2,2)
alter table t2 MODIFY id int ZEROFILL;
SELECT * from t2;
AUTO_INCREMENT
在需要产生位移标识符或顺序值的时候,使用此参数,该值从1开始
CREATE TABLE AI(ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
MySQL分为两种方式:
浮点数
和定点数
浮点数包括float和double,而定点数只有decimal一种表示
(M,D)表示整数位+小数位
M
-精度
D
-标度
float和double在不指定精度时,默认会按照实际的精度来显示,而decimal默认的整数位为10,默认的小数位为0.即decimal(10,0)
BIT(位)类型,用于存放字段值,BIT(M)用来存放多位二进制数,M的范围1~64
CREATE TABLE AI(ID INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
ALTER TABLE AI ADD COLUMN bin bit(1);
desc AI;
INSERT INTO AI(bin) VALUES(1);
SELECT * from AI;
时间和日期类型
- 如果用来表示年月日,通常用DATE来表示
- 如果用来表示年月日时分表,通常用DATETIME表示
- 如果用来表示,通常用TIME来表示
CREATE TABLE t (d date, t time, dt datetime);
DESC t;
INSERT INTO t VALUES(now(), now(), now());
SELECT * FROM t;
TIMESTAMP和DATETIME表示的方法非常类似。
- TIMESTAMP支持的时间范围较小,其取值范围从19700101080001到2038年的某个时间。
- DATETIME是从1000-01-01 00:00:00 到 9999-12-31 23:59:59,范围更大。
字符串类型
- CHAR和VARCHAR类型
CHAR列长度固定为创建表时的声明的长度
VARCHAR列中的值为可变长字符串
CREATE TABLE vc(v VARCHAR(4), c CHAR(4));
INSERT INTO vc VALUES('ab ','ab ');
SELECT length(v),length(c) from vc;
SELECT CONCAT(v,'+'),CONCAT(c,'+') from vc;
- BINARY和VARBINARY类型
- ENUM类型
ENUM枚举类型,它的值范围需要在创建表时通过枚举类型显式指定,对1~255个成员的枚举需要1个字节存储;对255~65535个成员,需要2个字节存储。最多允许65535个成员。
CREATE table enum(gender enum('M','F'));
insert into enum values('M'),('1'),('f'),(NULL);
SELECT * FROM enum;
运行结果:
可以看出ENUM类型忽略大小写,在存储"M"、"f"时将它们都转换成大写,还可以看出对于插入不在ENUM范围内的值时,并没有警告。