gpt4 book ai didi

java - 防止在 mysql 中四舍五入时间戳

转载 作者:可可西里 更新时间:2023-11-01 07:02:35 27 4
gpt4 key购买 nike

我有一个 MySQL 表,其中有一个 TIMESTAMP 类型的字段。当我在表中插入时间戳时,它会四舍五入。

例如-如果我做一个

insert into tablename (time) values ("2014-08-25 23:59:59.587");

然后我做了一个

select * from tablename;

我明白了

2014-08-26 00:00:00

这导致我的代码出现错误,我使用最后一条记录的时间戳来确定新的一天从哪里开始。

如何确保小数部分按原样存储?(或者如果它被正确存储,那么我该如何检索它——(使用 Java))

我正在使用 MySQL 5.6.16 和 Java 8(虽然这个问题不需要java,可以通过命令行验证)

当使用 Java 时,

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;


public class DBTest {

public static void main(String[] args) {

try {
Class.forName("com.mysql.jdbc.Driver");
Connection dbConn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/demod?useUnicode=true&characterEncoding=utf8", "dawon","1111");
Statement stmt = dbConn.createStatement();
String sql = "SELECT TEST FROM TIME;";
ResultSet rs = stmt.executeQuery(sql);
rs.next();
Timestamp ts = rs.getTimestamp("TEST");
System.out.println("time" + ts.toString() + " " + rs.getTimestamp("TEST"));
//both print out the rounded off value
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}

最佳答案

截至MySQL 5.6.4 the support for fractional seconds包含在 TimeDateTimeTimeStamp 数据类型中。

你的版本应该支持,你只需要详细说明你的专栏如下:

To define a column that includes a fractional seconds part, use the syntax type_name(fsp), where type_name is TIME, DATETIME, or TIMESTAMP, and fsp is the fractional seconds precision. For example:

CREATE TABLE t1 (t TIME(3), dt DATETIME(6)); The fsp value, if given, must be in the range 0 to 6. A value of 0 signifies that there is no fractional part. If omitted, the default precision is 0. (This differs from the standard SQL default of 6, for compatibility with previous MySQL versions.)

您应该阅读全文,因为它包含更多相关信息。

更新

使用以下命令在这里对我有用:

/* The fsp value, if given, must be in the range 0 to 6 */
CREATE TABLE tablename (columnname TIMESTAMP(3));

没什么大不了的,但是当前版本的 Workbench 似乎缺少对“创建表”界面中该功能的支持。我必须使用直接命令来创建表。

关于java - 防止在 mysql 中四舍五入时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25517612/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com