如何使用纳秒在phpmyadmin中创建时间轴?

时间:2015-05-05 06:21:02

标签: java mysql jdbc phpmyadmin

我目前正在尝试使用java和jdbc从mysql数据库创建phpmyadmin中的时间轴。在数据库中,我存储了从pcap文件中获取的IP,我从数据包中获取了我想要的时间(使用packet.getCaptureHeader().nanos())。每次IP发生时,我都会增加一个计数器。我想要的是创建一个时间线,显示每个IP的计数器总和的进度。我尝试了一些东西,但我认为我走错了路。有什么建议吗?

long timer=packet.getCaptureHeader().nanos();
Class.forName("com.mysql.jdbc.Driver");
connect = DriverManager.getConnection("jdbc:mysql://localhost/thesis?"
+ "user=sqluser&password=sqluserpw");
preparedStatement = connect.prepareStatement("INSERT INTO  thesis.ICMP values (?, ?, ?, ?) ON DUPLICATE KEY UPDATE counter=counter+1;");
preparedStatement.setString(1, xIP);
preparedStatement.setString(2, "ICMP");
preparedStatement.setInt(3, 1);
preparedStatement.setLong(4, timer);
preparedStatement.executeUpdate(); 

我注意到如果我使用DATE类型变量,我可以创建简单的时间线,但DATE不支持这种准确性。请随意思考开箱即用,甚至建议一种新方法,我不会介意。

1 个答案:

答案 0 :(得分:1)

MySQL不支持纳秒分辨率。从MySQL 5.6.4开始,支持fractional seconds with microsecond precision,但为了进一步提高精度(或者如果你有一个旧的MySQL版本),你必须自己想出一些东西。

在这种特殊情况下我可能会做的是将它存储为第二个分辨率的日期,然后存储第二个分数的小数部分,转换为纳秒,作为无符号INT(有符号整数可以工作,但是你不管怎样,我从不想要负值。缺点是搜索和排序变得更加困难。 This person正在讨论将纳秒存储为十进制,这是我不明白的,但除此之外还有一些好的想法。另一种可能性是使用BIGINT来存储自纪元以来的纳秒数,但这只能提供大约500年的可能值。对于您的使用,这可能没问题,但要记住这一点。