自动初始化和更新 TIMESTAMP 或 DATETIME
时区处理
当存储 TIMESTAMP 时,TiDB 会将当前时区的 TIMESTAMP 值转换为 UTC 时区。当读取 TIMESTAMP 时,TiDB 将存储的 TIMESTAMP 值从 UTC 时区转换为当前时区(注意:
时区处理 当存储 TIMESTAMP 时,TiDB 会将当前时区的 TIMESTAMP 值转换为 UTC 时区。当读取 TIMESTAMP 时,TiDB 将存储的 TIMESTAMP 值从 UTC 时区转换为当前时区(注意:DATETIME 不会这样处理)。每次连接的默认时区是服务器的本地时区,可以通过环境变量 time_zone 进行修改。 警告: 和 MySQL 一样,TIMESTAMP 数据类型受 2038 年问题的影响。如果存储的值大于 2038,建议使用 DATETIME 类型。 YEAR 类型 YEAR 类型的格式为 YYYY,支持的值范围是 1901 到 2155,也支持零值 0000。
YEAR 类型遵循以下格式规则: 无效的 YEAR 值会自动转换为 0000(如果用户没有使用 NO_ZERO_DATE SQL 模式)。 自动初始化和更新 TIMESTAMP 或 DATETIME 带有 TIMESTAMP 或 DATETIME 数据类型的列可以自动初始化为或更新为当前时间。 对于表中任何带有 TIMESTAMP 或 DATETIME 数据类型的列,你可以设置默认值,或自动更新为当前时间戳。 在定义列的时候,TIMESTAMP 和 DATETIME 可以通过 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 来设置。DEFAULT 也可以设置为一个特定的值,例如 DEFAULT 0 或 DEFAULT '2000-01-01 00:00:00'。
除非指定 DATETIME 的值为 NOT NULL,否则默认 DATETIME 的值为 NULL。指定 DATETIME 的值为 NOT NULL 时,如果没有设置默认值,则默认值为 0。
时间值的小数部分 DATETIME 和 TIMESTAMP 值最多可以有 6 位小数,精确到毫秒。如果包含小数部分,值的格式为 YYYY-MM-DD HH:MM:SS[.fraction],小数部分的范围为 000000 到999999。必须使用小数点分隔小数部分与其他部分。 日期和时间类型的转换 在日期和时间类型之间进行转换时,有些转换可能会导致信息丢失。例如,DATE、DATETIME 和 TIMESTAMP 都有各自的有效值范围。TIMESTAMP 不能早于 UTC 时间的 1970 年Mssq类型转换函数,也不能晚于 UTC 时间的 2038-01-19 03:14:07。根据这个规则,1968-01-01 对于 DATE 或 DATETIME 是有效的,但当 1968-01-01 转换为 TIMESTAMP 时,就会变成 0。 DATE 的转换: DATETIME 或 TIMESTAMP 的转换: 如果要将 TIME 转换为其他时间和日期格式,日期部分会自动指定为 CURRENT_DATE()。最终的转换结果是由 TIME 和 CURRENT_DATE() 组成的日期。也就是说,如果 TIME 的值超出了 00:00:00 到 23:59:59 的范围,那么转换后的日期部分并不表示当前的日期。 当 TIME 转换为 DATE 时,转换过程类似,时间部分被舍弃。 使用 CAST() 函数可以显式地将值转换为 DATE 类型。例如:
将 TIME 和 DATETIME 转换为数字格式。例如:
年份为两位数 如果日期中包含年份为两位数,这个年份是有歧义的,并不显式地表示实际年份。 对于 DATETIME、DATE 和 TIMESTAMP 类型,TiDB 使用如下规则来消除歧义。 上述规则也适用于 YEAR 类型,但有一个例外。将数字 00 插入到 YEAR(4) 中时,结果是 0000 而不是 2000。 如果想让结果是 2000,需要指定值为 2000。 对于 MIN() 和 MAX() 等函数,年份为两位数时可能会得到错误的计算结果。建议年份为四位数时使用这类函数。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |