我有一个MySQL表,其中包含TIMESTAMP类型的单个字段.当我在表中插入一个时间戳时,它会四舍五入.例如 – 如果我做了insert into tablename (time) values (2014-08-25 23:59:59.587);然后我做了select * from table...
我有一个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包含在Time,DateTime和TimeStamp数据类型中.
您的版本应该支持它,您只需要详细说明您的列,如下所示:
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似乎缺少“create table”界面中对该功能的支持.我不得不使用direct命令来创建表.
本文标题为:java – 防止在mysql中舍入时间戳
基础教程推荐
- java – 为什么文件系统存储比SQL数据库更快 2023-11-05
- SpringBoot使用AOP实现统计全局接口访问次数详解 2023-01-13
- SpringBoot接入钉钉自定义机器人预警通知 2023-03-06
- 详细SpringBoot生命周期接口的使用 2022-11-12
- Java如何实现将类文件打包为jar包 2022-12-08
- Java中Servlet的生命周期详解 2023-04-23
- Spring操作JdbcTemplate数据库的方法学习 2022-11-25
- java实现简单的学生管理系统 2022-11-01
- 详解Java如何优雅地书写if-else 2023-04-12
- JSP中springmvc配置validator的注意事项 2023-08-01