标签:seconds defaults 赋值 开始 mysql 5.6 知识 ati 简介 server
总结背景: 对于MYSQL数据库日期类型或多有了解, 但并很清晰其中一些规则. 基本都是面向浏览器编码, 这实质上也是一种方式. 但期间遇到两个问题:
因为这两点 促使我硬着头皮查看MYSQL的官方文档 虽然刚开始很难受 结果的确收获颇多. 以下是我的一点总结:
2、Automatic Initialization and Updating for TIMESTAMP and DATETIME
1.1、存储使用的长度
MySQL 5.6.4版本之后允许TIME、TIMESTAMP、DATETIME类型具有[0-6]位小数部分(Fractional Seconds in Time Values), 因而存储使用长度为变化的
| Data Type | Storage Required Before MySQL 5.6.4 | Storage Required as of MySQL 5.6.4 |
|---|---|---|
YEAR |
1 byte | 1 byte |
DATE |
3 bytes | 3 bytes |
TIME |
3 bytes | 3 bytes + fractional seconds storage |
DATETIME |
8 bytes | 5 bytes + fractional seconds storage |
TIMESTAMP |
4 bytes | 4 bytes + fractional seconds storage |
例如 time类型使用3 bytes存储, 加上小数部分长度. 而需要多少长度,取决于小数的长度:
| Fractional Seconds Precision | Storage Required |
|---|---|
| 0 | 0 bytes |
| 1, 2 | 1 byte |
| 3, 4 | 2 bytes |
| 5, 6 | 3 bytes |
例如 , TIME(0), TIME(2), TIME(4), and TIME(6) 分别总共使用 3, 4, 5, and 6 bytes . TIME and TIME(0) 实质是一样的, 都需要3 bytes进行存储 .
1.2、字段声明和表示范围
由于MYSQL官方文档已经很清晰 直接附上原始文档 Date and Time Type Overview 这里只分析需要注意的点:
‘1000-01-01‘ to ‘9999-12-31‘ 存储格式为‘yyyy-mm-dd‘,也可能出现年使用 two-digit表示 例如: 12-01-01 MYSQL解释规则为: 00-69解释为2000-2069 70-99解释为1970-1999TIMESTAMP表示范围在‘1970-01-01 00:00:01.000000‘ UTC to ‘2038-01-19 03:14:07.999999‘ UTC , 而MySQL将TIMESTAMP值从当前时区转换为UTC以进行存储,并从UTC转换回当前时区以进行检索。如果期间时区发生的变化, 例如存储之后修改时区Section 5.1.12, “MySQL Server Time Zone Support. 那么取出来和之前存入的数据将不一致.‘1000-01-01 00:00:00‘ to ‘9999-12-31 23:59:59‘ 无时区.DATE, DATETIME, or TIMESTAMP 的时间会被转换为“零值” 根据类型转换为‘0000-00-00‘ or ‘0000-00-00 00:00:00‘, 否则直接会报错YEAR(4) 和 YEAR(2)(YEAR(2) Limitations and Migrating to YEAR(4)). YEAR(2)在MySQL 5.6.6之后已标注过时,使用YEAR(2)会被强制转换为YEAR(4)并产生warnings. YEAR允许使用 YY format 和 字符串(‘0‘-‘99‘, ‘0‘-‘69‘表示2000到2069‘ ‘70‘-‘99‘表示1970-1999)、数字(1-99, 1-69表示2001-2069 70-99表示1970-1999)进行赋值.
2、Automatic Initialization and Updating for TIMESTAMP and DATETIME(自动初始化 和 自动更新)
由于文章写的比较详细, 这里不再赘述, 给出原文链接 Automatic Initialization and Updating for TIMESTAMP and DATETIME 和 explicit_defaults_for_timestamp
知识还是需要系统性的了解, 即使记不住也没关系. 下次再去查询文档资料的时候会更有针对性. 而对于大多权威的技术文章都是英文 需要耐心下来阅读 一定有所收获.
主要参考链接: Date and Time Types
MYSQL时间类别总结: TIMESTAMP、DATETIME、DATE、TIME、YEAR
标签:seconds defaults 赋值 开始 mysql 5.6 知识 ati 简介 server
原文地址:https://www.cnblogs.com/xiaoxing/p/10423280.html