
mysql> create table timetest(
-> id int not null,
-> modtime timestamp default current_timestamp on update current_timestamp,
-> primary key(id)
-> )engine=innodb,default charset=utf8;
Query OK, 0 rows affected (006 sec)
以下是测试,包括建表时记录时间,插入时记录时间,更新时记录时间:
mysql> insert into timetest(id) values (1),(2),(3);
Query OK, 3 rows affected (006 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select from timetest;
+----+---------------------+
| id | modtime |
+----+---------------------+
| 1 | 2011-09-21 09:56:24 |
| 2 | 2011-09-21 09:56:24 |
| 3 | 2011-09-21 09:56:24 |
+----+---------------------+
3 rows in set (000 sec)
mysql> update timetest set id=10 where id=1;
Query OK, 1 row affected (006 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select from timetest;
+----+---------------------+
| id | modtime |
+----+---------------------+
| 2 | 2011-09-21 09:56:24 |
| 3 | 2011-09-21 09:56:24 |
| 10 | 2011-09-21 09:57:15 |
+----+---------------------+
3 rows in set (000 sec)
mysql> update timetest set id=4 where id=3;
Query OK, 1 row affected (005 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select from timetest;
+----+---------------------+
| id | modtime |
+----+---------------------+
| 2 | 2011-09-21 09:56:24 |
| 4 | 2011-09-21 09:58:10 |
| 10 | 2011-09-21 09:57:15 |
+----+---------------------+
3 rows in set (000 sec)
mysql>
new Date(0)改成new Date()
new Date()是系统时间,
Date()
分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
它的实际代码是:
public Date()
{
this(SystemcurrentTimeMillis()); //可以看出他也是调用的Date(long date)构造函数,传入的参数是SystemcurrentTimeMillis()),从1970到现在的毫秒数
}
new Date(0)是距离1970年1月1日 n毫秒的日期,api说明:
Date(long date)
分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
mysql怎么得到时间段每一天,不用表,就是得到一个时间段的每一天的日期
因为时间是动态的,得到系统时间的每天 是 连续 叠加(多个)? 还只是得到每天的时间即可(一个),如:‘2014-11-11’,’2014-11-12’,‘2014-11-13’ 还是只要根据系统当前时间得到昨天的'2014-11-17',而到了今天的''2014-11-18'把昨天的'2014-11-17'替换掉,只保留一个日期时间
mysql数据库里的日期用timestamp还是datetime好 (1)4个字节储存
(2)值以UTC格式保存
(3)时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
(4)TIMESTAMP值不能早于1970或晚于2037!
timestamp在数据库里实际记载的时间是国际标准时间,同一个timestamp值在不同的时区检索出来的日期时间是不一样的,因为系统会根据时区的不同进行自动时区转换,而datetime则不会进行转换时区转换,存储时是什么日期时间,检索出来的就是存入时的日期时间,它不会有变化。至于这两种日期时间类型哪种好是没有定论的,要根据实际情况和应用需求做出取舍。
请注意由于无需实施时区转换,系统处理dateime所产生的系统开销要比timestamp小。
没什么好不好的,方便省事才是王道。都用datetime 你说呢,谁在乎那点存储
类型
类型 存储需求 格式 时间范围
datetime 8个字节 yyyy-mm-dd hh-mm-ss 1000-01-01 00:00:00 到9999-12-31 23:59:59 timestamp 4个字节 yyyy-mm-dd hh-mm-ss 1970-01-01 00:00:00 到2037-12-31 23:59:59
timestamp类型会有时区变量的影响,跨时区使用时应注意
datetime 8个字节 yyyy-mm-dd hh-mm-ss 1000-01-01 00:00:00 到9999-12-31 23:59:59
timestamp 4个字节 yyyy-mm-dd hh-mm-ss 1970-01-01 00:00:00 到2037-12-31 23:59:59
timestamp类型会有时区变量的影响,跨时区使用时应注意
没什么好不好的,方便省事才是王道。都用datetime 你说呢,谁在乎那点存储 类型 类型 存储需求 格式 时间范围 datetime 8个字节
Mysql中经常用来存储日期的数据类型有2种:Date、Datetime
1Date数据类型:用来存储没有时间的日期。Mysql获取和显示这个类型的格式为“YYYY-MM-DD”。支持的时间范围为“1000-00-00”到“9999-12-31”。
2Datetime类型:存储既有日期又有时间的数据。存储和显示的格式为 “YYYY-MM-DD HH:MM:SS”。支持的时间范围是“1000-00-00 00:00:00”到“9999-12-31 23:59:59”。
TIMESTAMP列用于INSERT或UPDATE *** 作时记录日期和时间。如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近 *** 作的日期和时间。也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。
TIMESTAMP值返回后显示为'YYYY-MM-DDHH:MM:SS'格式的字符串,显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP列添加+0。
注释:MySQL41以前使用的TIMESTAMP格式在MySQL51中不支持;关于旧格式的信息参见MySQL41参考手册。
datetime
1 占用8个字节
2 允许为空值,可以自定义值,系统不会自动修改其值。
3 实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored)
4 与时区无关(It has nothing to deal with the TIMEZONE and Conversion)
5 不可以设定默认值,所以在不允许为空值的情况下,必须手动指定datetime字段的值才可以成功插入数据。
6 可以在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。
结论:datetime类型适合用来记录数据的原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime字段的值都不会改变,除非你手动更改它。
timestamp
1 占用4个字节
2 允许为空值,但是不可以自定义值,所以为空值时没有任何意义。
3 TIMESTAMP值不能早于1970或晚于2037。这说明一个日期,例如'1968-01-01',虽然对于DATETIME或DATE值是有效的,但对于TIMESTAMP值却无效,如果分配给这样一个对象将被转换为0。
4值以UTC格式保存( it stores the number of milliseconds)
5时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
6 默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。
7 数据库会自动修改其值,所以在插入记录时不需要指定timestamp字段的名称和timestamp字段的值,你只需要在设计表的时候添加一个timestamp字段即可,插入后该字段的值会自动变为当前系统时间。
8 以后任何时间修改表中的记录时,对应记录的timestamp值会自动被更新为当前的系统时间。
结论:timestamp类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。
看完这个比较你就知道用哪个好啦
我们公司一般用datatime,可控性比较强
jdbc查询Mysql数据库的日期问题
你没说错!
查出来可以保存为String类型 具体转化一下就OK了
BBSXP 用的MYSQL数据库还是MSSQL数据库
BBSXP同时支持Aess数据库和MSSQL数据库
在Configasp文件里定义:
IsSqlDataBase=1 '定义数据库类别,0为Aess数据库,1为SQL数据库
不知道你是哪个版本,在BBSxp 2008 SP2里Configasp文件在根目录下。内容如下:
<%
InstallIPAddress="127001" '安装BBSXP的IP地址,针对installasp的访问权限
TablePrefix="BBSXP_" '数据库表的前辍名(一般不用更改)
IsSqlDataBase=0 '定义数据库类别,0为Aess数据库,1为SQL数据库
If IsSqlDataBase=0 Then
'''''''''''''''''''''''''''''' Aess数据库设置 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SqlDataBase = "database/bbsxp2008mdb" '数据库路径
SqlProvider = "MicrosoftJetOLEDB40" '驱动程序[ MicrosoftJetOLEDB40 MicrosoftACEOLEDB120 ]
SqlPassword = "" 'ACCESS数据库密码
Connstr="Provider="&SqlProvider&";Jet Oledb:Database Password="&SqlPassword&"; Data Source="&ServerMapPath(SqlDataBase)
SqlNowString="Now()"
SqlChar="'"
IsSqlVer="ACCESS"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Else
'''''''''''''''''''''''''''''' SQL数据库设置 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
SqlLocalName = "(local)" '连接IP [ 本地用 (local) 外地用IP ]
SqlUserName = "sa" 'SQL用户名
SqlPassword = "1234" 'SQL用户密码
SqlDataBase = "bbsxp" '数据库名
SqlProvider = "SQLOLEDB" '驱动程序 [ SQLOLEDB SQLNCLI ]
ConnStr="Provider="&SqlProvider&"; User ID="&SqlUserName&"; Password="&SqlPassword&"; Initial CataLog="&SqlDataBase&"; Data Source="&SqlLocalName&";"
SqlNowString="GetDate()"
IsSqlVer="MSSQL"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
End If
'''''''''''''''''''''''''' 以下为专业人员设置选项,普通用户请勿修改 ''''''''''''''''''''''''''
SessionCodePage="936" '936(简体中文) 950(繁体中文) 65001(Unicode)
BBSxpCharset="GB2312" 'GB2312(简体中文) Big5(繁体中文) UTF-8(Unicode)
ResponseCharset=BBSxpCharset
ResponseBuffer=True
%>
注:
上面bbsxp7b1版本用的是Aess数据库,因为IsSqlDataBase=0
mysql数据库可以修改表的日期格式吗
日期型的字段 存储的格式是固定的不可以修改, 需要输出时 转换成需要的格式, 如果你不想输出时转换 那么需要 设为字符型的, 存储时转换 总之 不管先转还是后转 ,一定要转
问题:
仅用慢日志文件,如何快速获取分时报告?
如果有监控系统,获取分时报告(每小时慢查询的条数报告)不难,如果只有慢日志文件,就会有点费劲。
实验:
通过 pt-query-digest --timeline 功能,可以输出带时间戳的慢查询条目
用 sed 将 timeline 报告滤出
安装 termsql
使用 termsql,将报告导入,并使用 SQL 查询一条记录,以展示 termsql 的效果
可以看到 termsql 将 timeline 报告的每一行,整理成了一条数据,放在 SQLite 中。
下面就可以尽情使用 SQL 获取分时报告:
用一个复杂一点慢日志,获得如下结果:
可以轻松定位到慢查询的热点时段,也便于发现业务的周期性规律。
termsql 是一个很方便的小工具:
1 可以用于将文本导出到 SQLite 中,方便 SQL 查询。
2 它与 ps 或者 top 合用也有惊喜,比如找出 CPU 占用率高于 25% 的进程:
以上就是关于MySQL 建表自动添加当前系统时间全部的内容,包括:MySQL 建表自动添加当前系统时间、java怎么获取当前系统时间并写进mysql数据库,如下:获取得到的时间跟系统不一样,不知道为什么求指教、mysql怎么得到时间段每一天,不用表,就是得到一个时间段的每一天的日期等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)