跟我一起学习MySQL技术内幕(第五版):(第三章学习日记10)

3.2.6.1date,time,和datetime类型
3.2.6.2timestamp数据类型
3.2.6.3year数据类型
3.2.6.4时态数据类型的属性
3.2.6.5时态类型的小数秒功能
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3.2.6.1date,time,和datetime类型

date和time类型分别用于保存日期值和时间值,而datetime类型用于保存日期和时间的组合值.
这三种类型值的格式分别为:CCYY_MM_DD \ hh:mm:ss[.uuuuuuu]和 CCYY_MM_DDhh:mm:ss[.uuuuuuu]

对于MySQL5.6.4之前的版本,time和datetime值也有小秒数部分,只是在存储时会被丢弃掉
对于MySQL5.6.4之后的版本,datetime列会自动把当前时间戳作为初始值,并进行更新

如果把date值赋给datetime列,MySQL会自动补足为’00:00:00’
如果把datetime的值赋给date或者time值,MySQL会把不相干的部分去掉

select table t (dt database , d date , t time );
insert into t (dt , d, t) values (now(),now(),now());
select * from t;

从time到datetime的转换,,MySQL会在当前日期后添加上时间

MySQL里,datetime类型里的时间值与time不同 .

前者是一天里的时间'00:00:00~23:59:59',
后者是一段已经逝去的时间 取值范围可以包含负值和大于23:59:59的值

当向表里插入不完整的time值时,一定要注意有可能它不会被解释为你的期望值

3.2.6.2timestamp数据类型

timestamp是一种时态数据类型,用于存储日期和时间的组合值

1.timestamp类型列的取值范围:1970-01-01 00:00:00[.000000] ~ 2038-01-19 03:14:07[.999999]
2.MySQL5.6.4之前允许小数秒部分,但是存储时会被丢弃
3.对于每一个timestamp值,MySQL会用4个字节来把它存储为自纪元(1970年的第一天)以来总共逝去的秒数
4.1970年的起始确定了timestamp类型的取值范围下限值.不过timestamp的取值范围并非其实与1970-01-01 00:00:00
5.MySQL会按照世界标准时间(utc)来存储timestamp值.当保存这样的值时,服务器会把它从会话时区转化为utc.当以后检索该值时,服务器会把它从utc转换为会话时区,从而让你看到和存储结果一样的时间值.
6.不过如果另一个客户端使用了另一个时区去连接服务器,并检索该值,那么它看到的将会是调整为其所设置时区的那个值
create table t(ts timestamp)
set time_zone = '+00:00';
insert into t values ('2000-01-01 00:00:00');
select ts from t;

结果

----
ts
----------------
2000-01-01 00:00:00
set time_zone = '+03:00'
select ts from t;

结果

----
ts
----------------
2000-01-01 03:00:00
7.timestamp列会自动把当前时间戳设置为初始值,并进行更新
8.timestamp时间戳设置了NULL属性,当把NULL存储到该列时,该列值会被设置为当前时间戳.

3.2.6.3year数据类型

year是单字节数据类型,用来提高年值的表示效率.

1.在声明year列时,可以指定一个显示宽度M,M的值只能是2或4(默认值为4)
2.year值的取值范围是1970~2155
3.对于M=2,year只存储1970年到2069年之间的值.如果使用year(2)来存储取值范围之外的值,最终显示值将不确定(自MySQL5.6.6就废弃了year(2)在已有表里,year(2)列会继续保持不变,但对于新表,这样的列被创建为year(4)).
4.MySQL会使用其年值判断规则,将输入的2位year值转换为4位值(97和14会变为1997和2014)
5.数值00插入到4位year列时,最终存储的将会是0000而不是2000
  如果想要转换为2000,则需要以形如'0'或'00'的字符串来指定它

3.2.6.4时态数据类型的属性

1. 时态列的定义可以包含通用属性NULL或NOT NULL(默认为NULL)
    timestamp默认值为 not null
    也可以使用default子句来设定默认值
2.大部分情况下,这些默认值都必须为常量.除了trimestamp和datetime以外,是没有current_time这样的函数来设置为当前日期时间
3.如果其他的列想要得到当前时间的值,需要显示的设置列的值为 current_timestamp

3.2.6.5时态类型的小数秒功能

在time datetime 和timestamp类型的声明语法中,允许设置一个可选的小数秒精度(fsp)精度最高可达六位数.fsp必须是0~6,0表示没有小数部分,6表示请确到微秒(默认值为0)

对于含时态参数的函数,其接受或返回的时态值中都带有小数部分.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值