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

How to create a timeline in phpmyadmin using nanoseconds?

我目前正在尝试使用 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 不支持这种准确性。请随意跳出框框思考,即使提出新的方法,我也不介意。

MySQL 不支持纳秒分辨率。自 MySQL 5.6.4 以来,支持 fractional seconds with microsecond precision,但为了进一步精确(或者如果你有一个旧的 MySQL 版本),你必须在你的拥有。

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