null不是对象,''是对象,''是一个字符串型数据,是一个长度为0的字符串,而null只知道它是一个没有赋值过的,不属于任何数据类型
整形:int zerofill //用0填充,此时自动为该列的数值属性设置成无符号型
auto_increment //自动加1的列,每张表中只有一个并且需要设置成非空,主键或者外键
create table my_tb(id int auto_increment not null primary key)
小数:float:浮点数,float(7,4):指定了精度和标度,会将四舍五入后的结果插入;在不指定时按照实际的数值进行存储
decimal:精确的数据类型,默认是(10,0),当数据超出了相应的精度和标度会报错
位:bit(M)存放多位二进制数1-64
但是直接用select 语句不会看到结果,可以用bin()二进制函数,或者hex()十六进制函数进行读取
select bin(id),hex(id) from table1;
日期类型:date:日期 yyyy-mm-dd datetime:yyyy-mm-dd hh:mm:ss time: hh:mm:ss
timestamp:时间戳 返回yyyy-mm-dd hh:mm:ss格式的字符串
select now();//返回当前日期
timestamp 与datetime有一些区别:
timestamp 在创建时的默认值是:'CURRENT_TIMESTAMP'(系统日期)mysql中只将第一个timestamp字段设置默认时间为系统时间,其余的设置为0
create table t(
tm timestamp not null default current_timestamp;
)
use db;
insert into t values (null);
timestamp与时区有关,当插入日期时,会先转换成当地的时区后存放,而从数据库中取出时,同样会先将日期转换成本地时区后再显示。两个不同时区的用户看到的同 一个日期可能不一样;timestamp表示的日期的范围更窄,到2038年;当不明确为timestamp赋值时系统自动赋值为当前时间
创建表时,使用timestamp:
a tm timestamp not null default current_timestamp;//列值默认为当前时间戳,但是不进行更新
b tm timestamp not null default current_timestamp on update current_timestamp;//列值默认为当前时间戳,同时进行更新
c tm timestamp not null default 0 on update current_timestamp;//列值默认为0,自动更新
datetime 与时区无关 ;表示时间到9999-12-31 23:59:59
show variables like 'time_zone';//默认时区是系统时区即东八区
set time_zone='+9:00'//将时区改为东九区
mysql中允许多种格式的日期类型插入:
insert into tt values('2007-12-12 23:12:09');//标准格式
insert into tt values('2007*12*12 23&12&09');//分割符使用任意字符均可
insert into tt values('20071212231209');//字符串格式
insert into tt values(20071212231209);//整数格式
字符串类型:char 和varchar
char是创建时声明的长度,而varchar是可变长字符串
在检索的时候,char删除了尾部的空格,而varchar保留了尾部的空格
二进制类型:binary
当保存二进制的值时,在值的最后通过填充0x00来达到定义的长度
binary(3) 当插入'a'时,保存为:'a '
枚举型:enum enum('值1','值2')当赋值数据不属于值1和值2时,选择第一个值作为插入数据
集合:set set 可以一次选取多个成员对于重复插入的元素,每次只选择一次
create table t(
s set('a','b','c','d')
)
insert into t values('a','b'),('a','c'),('a','b','c'),('a','b','f'),('a','b','a') 相同元素只能插入一次