您好,欢迎访问一九零五行业门户网

mysql日期用什么类型

有5种类型:1、year,用于表示年,格式为“yyyy”;2、time,用于只需要时间信息的值,格式为“hh:mm:ss”;3、date,用于仅需要日期值时,格式为“yyyy-mm-dd”;4、datetime,用于需要同时包含日期和时间信息的值,格式“yyyy-mm-dd hh:mm:ss”;5、timestamp,与datetime类似,用于需要同时包含日期和时间信息的值。
本教程操作环境:windows7系统、mysql8版本、dell g3电脑。
mysql 中有多个表示日期的数据类型:year、time、date、dtaetime、timestamp。
类型名称 日期格式 日期范围 存储需求
year yyyy 1901 ~ 2155 1 个字节
time hh:mm:ss -838:59:59 ~ 838:59:59 3 个字节
date yyyy-mm-dd 1000-01-01 ~ 9999-12-3 3 个字节
datetime yyyy-mm-dd hh:mm:ss 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 8 个字节
timestamp yyyy-mm-dd hh:mm:ss 1980-01-01 00:00:01 utc ~ 2040-01-19 03:14:07 utc 4 个字节
year 类型
year 类型是一个单字节类型,用于表示年,在存储时只需要 1 个字节。可以使用各种格式指定 year,如下所示:
以 4 位字符串或者 4 位数字格式表示的 year,范围为 '1901'~'2155'。输入格式为 'yyyy' 或者 yyyy,例如,输入 '2010' 或 2010,插入数据库的值均为 2010。
以 2 位字符串格式表示的 year,范围为 '00' 到 '99'。'00'~'69' 和 '70'~'99' 范围的值分别被转换为 2000~2069 和 1970~1999 范围的 year 值。'0' 与 '00' 的作用相同。插入超过取值范围的值将被转换为 2000。
以 2 位数字表示的 year,范围为 1~99。1~99 和 70~99 范围的值分别被转换为 2001~2069 和 1970~1999 范围的 year 值。注意,在这里 0 值将被转换为 0000,而不是 2000。
提示:两位整数范围与两位字符串范围稍有不同。例如,插入 3000 年,读者可能会使用数字格式的 0 表示 year,实际上,插入数据库的值为 0000,而不是所希望的 3000。只有使用字符串格式的 '0' 或 '00',才可以被正确解释为 3000,非法 year值将被转换为 0000。
time 类型
time 类型用于只需要时间信息的值,在存储时需要 3 个字节。格式为 hh:mm:ss。hh 表示小时,mm 表示分钟,ss 表示秒。
time 类型的取值范围为 -838:59:59~838:59:59,小时部分如此大的原因是 time 类型不仅可以用于表示一天的时间(必须小于 24 小时),还可能是某个事件过去的时间或两个事件之间的时间间隔(可大于 24 小时,或者甚至为负)。
可以使用各种格式指定 time 值,如下所示。
'd hh:mm:ss' 格式的字符串。还可以使用这些“非严格”的语法:'hh:mm:ss'、'hh:mm'、'd hh' 或 'ss'。这里的 d 表示日,可以取 0~34 之间的值。在插入数据库时,d 被转换为小时保存,格式为 “d*24+hh”。
'hhmmss' 格式、没有间隔符的字符串或者 hhmmss 格式的数值,假定是有意义的时间。例如,'101112' 被理解为'10:11:12',但是 '106112' 是不合法的(它有一个没有意义的分钟部分),在存储时将变为 00:00:00。
提示:为 time 列分配简写值时应注意:如果没有冒号,mysql 解释值时,假定最右边的两位表示秒。(mysql 解释 time 值为过去的时间而不是当前的时间)。例如,读者可能认为 '1112' 和 1112 表示 11:12:00(即 11 点过 12 分钟),但mysql 将它们解释为 00:11:12(即 11 分 12 秒)。同样 '12' 和 12 被解释为00:00:12。相反,time 值中如果使用冒号则肯定被看作当天的时间,也就是说,'11:12' 表示 11:12:00,而不是 00:11:12。
示例
让我们看一下在time表中使用数据类型的示例。
首先,创建一个新表命名为tests 一个由四列:id,name,start_at,和end_at。start_at和end_at列的数据类型是time。
create table tests ( id int primary key auto_increment, name varchar(255) not null, start_at time, end_at time);
其次,在tests表中插入一行。
insert into tests(name,start_at,end_at)values('test 1', '08:00:00','10:00:00');
第三,从tests表中查询数据。
select name, start_at, end_atfrom tests;
date 类型
date 类型用于仅需要日期值时,没有时间部分,在存储时需要 3 个字节。日期格式为 'yyyy-mm-dd',其中 yyyy 表示年,mm 表示月,dd 表示日。
在给 date 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 date 的日期格式即可。如下所示:
以 'yyyy-mm-dd' 或者 'yyyymmdd' 字符中格式表示的日期,取值范围为 '1000-01-01'~'9999-12-3'。例如,输入 '2015-12-31' 或者 '20151231',插入数据库的日期为2015-12-31。
以 'yy-mm-dd' 或者 'yymmdd' 字符串格式表示日期,在这里yy表示两位的年值。mysql 解释两位年值的规则:'00~69' 范围的年值转换为 '2000~2069','70~99' 范围的年值转换为 '1970~1999'。例如,输入 '15-12-31',插入数据库的日期为 2015-12-31;输入 '991231',插入数据库的日期为 1999-12-31。
以 yymmdd 数字格式表示的日期,与前面相似,00~69 范围的年值转换为 2000~2069,80~99 范围的年值转换为 1980~1999。例如,输入 151231,插入数据库的日期为 2015-12-31,输入 991231,插入数据库的日期为 1999-12-31。
使用 current_date 或者 now(),插入当前系统日期。
示例
我们来看看下面的例子。
首先,创建一个新表名为people,其中出生日期列为date数据类型。
create table people ( id int auto_increment primary key, first_name varchar(50) not null, last_name varchar(50) not null, birth_date date not null);
接下来,在people表中插入一行。
insert into people(first_name,last_name,birth_date)values('john','doe','1990-09-01');
然后,查询数据来自people表。
select first_name, last_name, birth_datefrom people;
之后,使用两位数年份格式将数据插入people表中。
insert into people(first_name,last_name,birth_date)values('jack','daniel','01-09-01'), ('lily','bush','80-09-01');
在第一行中,我们使用01(范围00-69)作为年份,因此mysql将其转换为2001年。在第二行中,我们使用80(范围70-99)作为年份,mysql将其转换为1980年。
最后,我们可以从people表中查询数据,以检查数据是否已根据转换规则进行转换。
select first_name, last_name, birth_datefrom people;
datetime 类型
datetime 类型用于需要同时包含日期和时间信息的值,在存储时需要 8 个字节。日期格式为 'yyyy-mm-dd hh:mm:ss',其中 yyyy 表示年,mm 表示月,dd 表示日,hh 表示小时,mm 表示分钟,ss 表示秒。
在给 datetime 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 datetime 的日期格式即可,如下所示。
以 'yyyy-mm-dd hh:mm:ss' 或者 'yyyymmddhhmmss' 字符串格式表示的日期,取值范围为 '1000-01-01 00:00:00'~'9999-12-3 23:59:59'。例如,输入 '2014-12-31 05:05:05' 或者 '20141231050505’,插入数据库的 datetime 值都为 2014-12-31 05:05:05。
以 'yy-mm-dd hh:mm:ss' 或者 'yymmddhhmmss' 字符串格式表示的日期,在这里 yy 表示两位的年值。与前面相同,'00~79' 范围的年值转换为 '2000~2079','80~99' 范围的年值转换为 '1980~1999'。例如,输入 '14-12-31 05:05:05',插入数据库的 datetime 为 2014-12-31 05:05:05;输入 141231050505,插入数据库的 datetime 为 2014-12-31 05:05:05。
以 yyyymmddhhmmss 或者 yymmddhhmmss 数字格式表示的日期和时间。例如,输入 20141231050505,插入数据库的 datetime 为 2014-12-31 05:05:05;输入 140505050505,插入数据库的 datetime 为 2014-12-31 05:05:05。
datetime值可以包括具有yyyy-mm-dd hh:mm:ss[.fraction]例如的格式的尾随小数秒到微秒 2015-12-20 10:01:00.999999。包含小数秒精度时,datetime值需要更多存储空间,如下表所示:
分数秒精度存储 (字节)
0 0
1, 2 1
3, 4 2
5, 6 3
例如,2015-12-20 10:01:00.999999 需要8个字节,5个字节用于2015-12-20 10:01:00 ,3个字节用于.999999 而2015-12-20 10:01:00.9 只需要6个字节,1个字节用于小数秒精度。
timestamp 类型
timestamp 的显示格式与 datetime 相同,显示宽度固定在 19 个字符,日期格式为 yyyy-mm-dd hh:mm:ss,在存储时需要 4 个字节。但是 timestamp 列的取值范围小于 datetime 的取值范围,为 '1970-01-01 00:00:01'utc~'2038-01-19 03:14:07'utc。在插入数据时,要保证在合法的取值范围内。
提示:协调世界时(英:coordinated universal time,法:temps universel coordonné)又称为世界统一时间、世界标准时间、国际协调时间。英文(cut)和法文(tuc)的缩写不同,作为妥协,简称 utc。
timestamp 与 datetime 除了存储字节和支持的范围不同外,还有一个最大的区别是:
datetime 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;
而 timestamp 值的存储是以 utc(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。
提示:如果为一个 datetime 或 timestamp 对象分配一个 date 值,结果值的时间部分被设置为 '00:00:00',因此 date 值未包含时间信息。如果为一个 date 对象分配一个 datetime 或 timestamp 值,结果值的时间部分被删除,因此date 值未包含时间信息。
mysql timestamp以utc值存储。但是,mysql将datetime值存储为没有时区的值。我们来看下面的例子。
首先,将当前连接的时区设置为+00:00。
set time_zone = '+00:00';
接下来,创建一个表命名timestamp_n_datetime是由两列组成:ts与dt用timestamp和datetime使用下面的语句类型。
create table timestamp_n_datetime ( id int auto_increment primary key, ts timestamp, dt datetime);
然后,将当前日期和时间插入 timestamp_n_datetime 表的两个ts和每dt列 ,
insert into timestamp_n_datetime(ts,dt)values(now(),now());
之后,从timestamp_n_datetime表中查询数据。
select ts, dtfrom timestamp_n_datetime;
datetime和timestamp列中的值都相同。
最后,将连接的时区设置为+03:00并再次从timestamp_n_datetime表中查询数据。
set time_zone = '+03:00'; select ts, dtfrom timestamp_n_datetime;
如您所见,timestamp列中的值不同。这是因为当我们更改时区时,timestamp列以utc格式存储日期和时间值,根据新时区调整列的值。
这意味着如果您使用timestamp数据存储日期和时间值,则在将数据库移动到位于不同时区的服务器时应认真考虑。
【相关推荐:mysql视频教程】
以上就是mysql日期用什么类型的详细内容。
其它类似信息

推荐信息