我正在尝试使用java在我的数据库中设置时间戳,但是在我的表中,我得到的只是日期,没有时间(即,看起来像"2010-09-09 00:00:00").
我使用我的mysql数据库中的日期时间字段(因为它似乎是日期时间是比较常见的比时间戳).我设置日期的代码如下所示:
PreparedStatement ps = conn.prepareStatement("INSERT INTO mytable (datetime_field) VALUES (?)")
java.util.Date today = new java.util.Date();
java.sql.Date timestamp = new java.sql.Date(today.getTime());
ps.setDate(1, timestamp);
ps.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
如何设置日期以包含时间?
编辑: 我按照下面的说法更改了代码,并设置了日期和时间.
PreparedStatement ps = conn.prepareStatement("INSERT INTO mytable (datetime_field) VALUES (?)")
java.util.Date today = new java.util.Date();
java.sql.Timestamp timestamp = new java.sql.Timestamp(today.getTime());
ps.setTimestamp(1, timestamp);
ps.executeUpdate();
Run Code Online (Sandbox Code Playgroud) 我有以下格式的数千个日期:
2011-10-02T23:25:42Z (又名ISO 8601 in UTC)
我应该使用什么MySQL数据类型在MySQL数据库中存储这样的ISO8601日期?例如Datetime,timestamp或其他什么?
哪个最适合比较(例如,在两个日期/时间之间获取记录)并从查询中排序结果?如果数据库非常大呢?
什么是将上述PHP字符串转换为MySQL存储的最佳方法?(我猜date_default_timezone_set('UTC');是会用的?)
可能重复:
datetime vs timestamp?
我有一个Mysql表,它有一个列add_date.它跟踪记录添加到数据库的日期/时间.
基于此表的查询:
在这种情况下哪个更好 - unix时间戳或日期时间?
现在我正在使用两者,但由于该表随着时间的推移会有数百万条记录,因此两列都可能会影响数据库的大小.
Unix时间戳似乎更适合2 hours在PHP中转换为以前的格式,并且它与时区无关.但是datetime具有更好的可读性,并且对特定日期/时间/年的查询似乎更容易.
你的建议?
我有一个mysql表和数据条目:
CREATE TABLE `invoices`.`invoices` (
`InvoiceID` bigint(20) unsigned NOT NULL auto_increment,
`UserID` int(10) unsigned NOT NULL,
`Value` decimal(10,3) NOT NULL,
`Description` varchar(4048) NOT NULL,
`DateTime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`InvoiceID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin5;
Run Code Online (Sandbox Code Playgroud)
我想删除"更新CURRENT_TIMESTAMP"条件.我怎么能改变这张桌子?
在现有数据库中,我是年龄列(INT).现在我需要将其设置为dob(DATETIME).
我尝试通过PHPMyAdmin这样做,将CURRENT_TIMESTAMP作为默认值,如138 upvotes的回答所定义.然而,PHPMyAdmin #1067 - invalid default value for 'dob'在附加屏幕截图中抱怨:

有人可以建议我为什么会收到这个错误以及如何解决这个问题?
我做了一个mysql 5.5数据库的转储并将其加载到5.6服务器.
转储将UPDATE CURRENT_TIMESTAMP添加到之前没有它的一堆列中.
我正在搜索一个ALTER TABLE语句,该语句将删除ON UPDATE CURRENT_TIMESTAMP规则而不进行任何其他更改.在我的想象中它应该是ON UPDATE NOOP或类似的东西ON UPDATE NO_CURRENT_TIMESTAMP.
ON UPDATE JUST_BE_A_NORMAL_COLUMN?
我尝试使用mysql workbench中的"Clear default"选项,它与它应该做的相反 - 它给了列一个默认值!
我能够摆脱默认值ALTER TABLE t ALTER COLUMN c DROP DEFAULT,因此INSERT中的列是强制性的(就像它在转储/重新加载之前一样,就像我想要的那样)但UPDATE上的不需要的行为仍然存在.
我没有启用该explicit_defaults_for_timestamp选项.如果我刚开始新鲜,我肯定会使用这个选项,因为它看起来更加清醒.但是因为我已经在5.5中按照我想要的方式配置了列,所以我希望它们在转移到5.6时保持相同的语义.显然mysqldump还不够聪明.
在这一点上,我不确定我理解启用会产生什么影响explicit_defaults_for_timestamp.该选项是否会更改现有表的行为,还是仅更改对未来CREATE TABLE命令的解释?打开它会以某种方式帮助我修复破碎的列?
更新:
类似的问题在这里,但一个是关于创建一个新表,而不是改变现有列.实际上,这个问题是我在5.5服务器上创建表时用作指南的问题.我使用了两步过程:使用默认值0创建以禁止ON UPDATE CURRENT_TIMESTAMP,然后删除默认值.
如果没有explicit_defaults_for_timestamp,两步程序肯定不会在5.6服务器上产生正确的结果; 这是一个标志,5.6无法完美地模仿这种模式下的旧行为,或旧服务器从未做过我认为它正在做的事情.我不能确定哪个.
表结构:
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| total | int(11) | YES | | NULL | |
| thedatetime | datetime | YES | MUL | NULL | |
+-------------+----------+------+-----+---------+----------------+
Run Code Online (Sandbox Code Playgroud)
总行数:137967
mysql> explain select * from out where thedatetime <= NOW();
+----+-------------+-------------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len …Run Code Online (Sandbox Code Playgroud) 1. 当我在Windows上运行这个MYSQL语法时,它运行正常.
CREATE TABLE New
(
id bigint NOT NULL AUTO_INCREMENT,
timeUp datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在Linux上运行此代码时,我收到了一个错误
#1067 - Invalid default value for 'time'
Run Code Online (Sandbox Code Playgroud)
2. 在窗口的情况下是不敏感如.新旧两者被认为是相同的.但在linux上,案例很敏感.
配置Linux
MySQL 5.5.33,phpMyAdmin 4.0.5和PHP 5.2.17
Windows的配置
MySql:5.6.11,phpMyAdmin 4.0.4.1 PHP:5.5.0
他们有什么方法可以让它们在两个系统中都很常见.或任何替代方法.谢谢阅读.
我想在时间组件中将时间戳存储在数据库中00:00:00.
以下代码:
$start_date = Carbon::createFromFormat('d-m-Y', $date_interval["start_date"]);
$end_date = Carbon::createFromFormat('d-m-Y', $date_interval["end_date"]);
Run Code Online (Sandbox Code Playgroud)
将当前时间添加到日期,当我仅提供没有时间规范的日期时.
我需要这个,因为我需要从数据库中检索内部整数,这应该是一天的开始.
存储这个"一天开始"的最佳方法是什么?
如果我使用QSqlTableModel访问MySQL数据库,我可以使用以下代码转换TIMESTAMP字段:
QDateTime dateTime = index(section, column).data().toDateTime();
QString str = dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");
Run Code Online (Sandbox Code Playgroud)
所以str显示,即2014-06-22 22:11:44.221.但我想使用QSqlQuerry访问数据库,所以我这样做:
QDateTime dateTime = query.value(column).toDateTime();
str = dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz");
Run Code Online (Sandbox Code Playgroud)
但现在我错过了毫秒,str显示2014-06-22 22:11:44.000.看到毫秒的正确方法是什么?
如果我这样做,str = query.value(column).toString();那么我得到2014-06-22T22:11:44.
mysql ×10
php ×3
datetime ×2
sql ×2
date ×1
date-format ×1
iso8601 ×1
java ×1
jdbc ×1
linux ×1
php-carbon ×1
phpmyadmin ×1
qt ×1
timestamp ×1
windows ×1