'0000-00-00'
timestamp '0000-00-00 00:00:00'
time
'00:00:00'
year
0000
“零”值是特殊的,但可以直接用这些值,这些值可以简单地写成'0'或0
在MyODBC2.50.12及以上版本中,“零”值自动转为null值,因为MyODBC不能处理。
二、datetime,date和timestamp类型
datetime 显示为'YYYY-MM-DD HH:MM:SS'格式,范围为'1000-01-01
00:00:00'到'9999-12-31 23:59:59'
date
显示为'YYYY-MM-DD'格式,范围为'1001-01-01'到'9999-12-31'
timestamp 范围从'1970-01-01 00:00:01'UTC 到'2038-01-09
03:14:07'UTC
1. 指定值
指定datetime值时,可以用'2009-01-01 11:20:30','2009/01/01
11*20*30','2009*01*01 11^20^30','2009@01@01
11+20+30'等,效果是一样的。
指定date值时,与上类似。
指
定datetime值时,也可以用字符串'YYYYMMDDHHMMSS'或'YYMMDDHHMMSS'格式,如'20090101112030'或
'090101112030',但'20090101119030'(分钟为90)会被解析为“零”值:'0000-00-00
00:00:00'。
指定date值时,与上类似。
指定datetime值时,也可以用数字YYYYMMDDHHMMSS或YYMMDDHHMMSS格式,如20090101112030或
090101112030。
指定date值时,与上类似。
指定datetime、date或timestamp值时,也可以用now()或current_date的值。
指定datetime、date或timestamp值时,月、日、时、分、秒,若小于10,可以只写1位,如'2009-01-01
11:30:30'与'2009-1-1 11:30:30'一样。
用数字指定时间时,可以为6、8、12或14位,6位表示YYMMDD,8位表示YYYYMMDD,12位表示YYMMDDHHMMSS,14位表示
YYYYMMDDHHMMSS。
用不带分割符的字符串指定时间时,如果字符串为8位或14位的,那么认为年份为YYYY,否则认为年份为YY,之后按顺序解析月日时分秒。
2. 不同类型转换
date值赋给datetime或timestamp时,时间部分为'00:00:00'。
datetime或timestamp值赋给date时,时间部分被去掉。
转换时注意其表示范围有所不同,超出范围的将被转为“零”值。
3. 注意'10:11:12'会被转为'2010-11-12 00:00:00'或'2010-11-12'。
4. timestamp类型
从当前时区转成UTC保存,要读取时,再从UTC转成当前时区。(不发生在datetime类型上)。
当前时区对应time_zone系统变量(缺省值为'System'表示用系统变量system_time_zone的值)
系统变量system_time_zone的值在启动MySQL时指定,一般去TZ环境变量,或执行mysqld_safe时用--timezone选
项。
(
linux
安
装时挑选时区,安装后时区保存在/etc/sysconfig/clock文件里。)
若将timestamp类型字段定义为default
current_timestamp,那么插入一条记录时,该timestamp字段自动被赋值为当前时间。
若将timestamp类型字段定义为on update
current_timestamp,那么修改一条记录时,该timestamp字段自动被修改为当前时间。
在一个表里面的timestamp字段只能有下面4种定义:
a. 是default current_timestamp
插入时系统自动赋值,插入时若在
SQL
语句中指定该字段的值,则用SQL语句中的指定值。
修改时时间值不自动改变,但可以在SQL语句中指定其值。
b. 是on update current_timestamp
插入时系统不自动赋值(字段为“零”值),但可以在SQL语句中指定该字段的值。
修改时,系统自动赋值,但若SQL语句中指定其值,则用SQL语句中的指定值。
c.两个都有default current_timestamp on update current_timestamp
如果timestamp后面啥都不写,也相当于2个都有。
插入修改时系统自动赋值,SQL语句中若指定,则用SQL语句中的指定值。
d.如果default 后面写个常数,如default
20090101010000,那么插入时即为这个值。其他与上面类似。
另外,一个表里面,如果想定义第2个timestamp字段,而且想让第2个字段有系统自动修改的机制,
那么之前的那个字段一定要赋予default 常数(即上面d),
然后,再给这个新的timestamp字段进行如上abc的定义,区别是这个新的timestamp字段不能后面啥不都写,
如果啥都不写,那么插入和修改时系统不会自动赋值。
依次类推,再想定义第3个timestamp字段,而且想让第3个字段有系统自动修改的机制,
那么之前第2个timestamp字段一定要赋予default 常数(即上面d),
然后,再给这个新的timestamp字段进行如上abc的定义,区别跟前面一样。
上述current_timestamp还可以用它的同义词
current_timestamp(),now(),localtime,localtime(),localtimestamp,localtimestamp()
代替。
timestamp字段缺省不允许空值,如果指定它的值为null,实际上就是用当前时间值赋给他了。
但是,可以这样定义:
col1 timestamp null default null,
注释:该字段可以为null,插入时缺省就是null,如果赋值null,那也真是null而不是当前时间值。
col2 timestamp null default
0,
注释:该字段可以null,插入时缺省为0,如果赋值null,那也真是null而不是当前时间值。
如果MySQL服务器以MAXDB
SQL模式运行,那么timestamp等同于datetime类型,前面说的timestamp类型的所有描述都消失。
三、time类型
'HH:MM:SS'或'HHH:MM:SS'格式,范围为'-838:59:59'到'838:59:59'。
之所以小时值可以范围这么大,是因为time类型还可以用来表示两个时间点之差。
格式可以为'D HH:MM:SS.fraction',其中D指示天(0~34),MySQL不存储D和fraction值。
可以为'D HH','HH:MM','HH:MM:SS','D
HH','SS',不能为'MM',或'HH'。注意:'11:12'被解释为'11:12:00'。
数字格式HHMMSS,可以为SS,MMSS,HHMMSS,HHMMSS.fraction,不能为MM或HH。注意:1112被解释为
'00:11:12'。
对于字符型来讲,时分秒如果小于10,可以写成1位。
合法的越界的值将被MySQL自动转换成靠近它的边界值,如'-850:00:00'被转换为'-838:59:59'。
不合法的值被MySQL自动转换为“零”值:'00:00:00'。
表中的0值不能区分是真实存储的0值还是因为不合法而被转换的0值。
四、year类型
year(2)或year(4),缺省为year(4)
year(2) 范围为70(1970)-69(2069),数字0表示2000年,'0'表示“零”值:0000
year(4) 范围为1901-2155
SQL语句中的Min(),Max()将把year转换成1个数字,在某些时候会产生问题。
五、存储空间
date 3个字节
time 3个字节
datetime 8个字节
timestamp 4个字节
year 1个字节
相关推荐
MySQL中主要有三种时间类型:DATE、DATETIME和TIMESTAMP。DATE类型仅存储年月日,而DATETIME和TIMESTAMP可以存储日期和时间。两者的区别在于,DATETIME的范围更广(1000-01-01到9999-12-31),而TIMESTAMP在MySQL ...
本文将深入探讨MySQL数据库中的时间类型以及它们在Java编程语言中相对应的数据类型,以及如何在两者之间进行转换。 MySQL数据库提供了多种时间类型来处理日期和时间数据: 1. **DATE**:这个类型仅存储日期,格式...
### MySQL时间类型详解:datetime、bigint、timestamp 在MySQL中,根据不同的应用场景和需求,可以选择多种方式来存储日期和时间信息。本篇文章将详细介绍三种常用的时间类型:`datetime`、`bigint` 和 `timestamp`...
MySQL数据库系统中,时间数据类型是用来存储日期和时间值的,其中包括`DATE`、`DATETIME`和`TIMESTAMP`。这些类型在某些方面相似,但在其他方面却有着明显的区别。下面将详细介绍`DATETIME`和`TIMESTAMP`的比较,并...
在MySQL数据库中,datetime和timestamp是两种常用的日期和时间数据类型,它们虽然都可以用来存储日期和时间信息,但在使用和处理上存在一些显著的区别。本文将深入探讨这两种数据类型的差异以及如何在实际应用中选择...
在本文中,我们将讨论 MySQL 中的时间类型,包括 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 等五种类型,并介绍各自的特点和应用场景。 DATE 类型 DATE 类型用于存储日期信息,格式为 ‘YYYY-MM-DD’,占用 3 字节...
在 MySql 中,日期时间类型对应的是 DATE、TIME、DATETIME、TIMESTAMP 等类型。其中,DATE 类型用于存储日期,TIME 类型用于存储时间,DATETIME 类型用于存储日期和时间,TIMESTAMP 类型用于存储时间戳。 布尔类型 ...
这些数据类型包括DATE、TIME、DATETIME、TIMESTAMP和YEAR。以下是这些数据类型的详细描述及使用细节: 1. DATE数据类型用于存储日期值,而不包含时间信息。它的支持范围是“1000-01-01”至“9999-12-31”。在MySQL...
日期时间类型包括 DATE、DATETIME、TIMESTAMP、TIME、YEAR 等。这些数据类型都可以用来存储日期和时间值,但它们的格式和取值范围不同。例如,DATE 是年月日格式,DATETIME 是年月日时分秒格式,而 TIMESTAMP 是...
本文将讨论 MySQL 中原生的 DATE 类型和 INT 类型的比较,介绍 Datetime 和 Timestamp 两种原生类型,并讨论使用 INT 字段保存 Unix 时间的方法。 Datetime 数据类型 Datetime 数据类型用于保存同时包含日期和时间...
这些包括DATE(仅日期)、TIME(仅时间)、DATETIME(日期和时间)和TIMESTAMP(也是日期和时间,但通常与时间戳相关联)。每种类型都有其特定的用途和精度,例如TIMESTAMP可以存储到微秒级别。 使用Date/Time类型...
2. 日期和时间类型:MySQL 的日期和时间类型包括 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。DATETIME 可以存储日期和时间,而 DATE 和 TIME 分别只存储日期和时间部分。TIMESTAMP 类型特别之处在于它可以自动更新,...
### MySQL日期数据类型与时间类型使用总结 在MySQL数据库中,日期和时间是十分重要的数据类型,被广泛应用于各种业务场景之中。为了更好地理解和运用这些数据类型,本篇将对MySQL中的日期数据类型和时间类型进行...
MySQL数据库在处理日期和时间数据时提供了多种数据类型,包括日期类型和时间类型。这些数据类型的选择对于数据库设计和性能优化至关重要。以下是关于MySQL日期和时间类型的详细说明: 日期类型: 1. **datetime**:...
数据库和表的创建与管理 表的字段类型 ...表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使
MySQL数据库在处理日期和时间数据时提供了多种数据类型,包括日期类型和时间类型,每种类型都有其特定的格式、存储空间占用以及适用范围。在选择适合的数据类型时,需要根据实际需求进行权衡。 首先,让我们来看看...
在MySQL数据库中,datetime类型常用于存储日期和时间信息,如事件的发生时间、创建时间或修改时间等。在创建表时,我们有时希望这些时间字段默认记录当前时间,而不是允许NULL值。在MySQL中,设置datetime类型字段的...
本篇文章将详细介绍 MySQL 的所有数据类型,包括日期和时间类型、数字类型、字符串类型和二进制类型。 日期和时间类型 --------------- MySQL 的日期和时间类型用于存储日期和时间信息,包括日期、时间、日期时间...