programing

mariadb: jdbc: setTimestamp가 밀리초를 잘라냅니다.

coolbiz 2022. 9. 28. 23:24
반응형

mariadb: jdbc: setTimestamp가 밀리초를 잘라냅니다.

prepared Statement를 사용하여 mariadb에 삽입하면 밀리초가 단축되는 것 같습니다.구글에서 검색해 보니 해결되거나 적용되지 않는 유사한 문제가 많이 발견되었습니다.하지만 나만 이런 문제를 안고 있다는 것이 믿기 어려워서 mariadb에 버그를 제출하기 전에 먼저 여기에 물어보고 싶었습니다.코드는 매우 간단합니다.

표:

create table tt (id decimal(10), create_time timestamp(6) default 0);
or
create table tt (id decimal(10), create_time datetime(6) default 0);

자바코드:

Class.forName("org.mariadb.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL,"root","abc");
Statement insert1 = conn.createStatement();
insert1.execute("insert into tt (id, create_time) values (1,'2013-07-18 13:44:22.123456')");
PreparedStatement insert2 = conn.prepareStatement(
  "insert into tt (id, create_time) values (?,?)");
insert2.setInt(1, 2);
insert2.setTimestamp(2, new Timestamp(1273017612999L));
insert2.execute();

DOS 콘솔 출력:

MariaDB [duc]> select * from tt;
+------+----------------------------+
| id   | create_time                |
+------+----------------------------+
|    1 | 2013-07-18 13:44:22.123456 |
|    2 | 2010-05-05 02:00:12.000000 |
+------+----------------------------+
2 rows in set (0.00 sec)

==> id=2의 경우 밀리초가 손실됩니다.

이게 벌레처럼 보이나요?아니면 제가 뭘 잘못했나요?

OS: Windows 7, 64 비트 MariaDB 버전: 10.0.12 JDBC 커넥터: 1.1.7 (mariadb) 또는 5.1.32 (mysql)

Oracle 데이터베이스에서 동일한 코드를 테스트했습니다.밀리초가 삽입됩니다.

도와주셔서 감사합니다...

업데이트: 이것을 mariaDB 버그 데이터베이스에 보고했습니다.https://mariadb.atlassian.net/browse/CONJ-107

MariaDB JDBC 드라이버에서 "useFractionalSeconds"를 활성화해야 합니다.예를 들어 "jdbc:mariadb://127.0.0.1:3306/somedb?useFractionalSeconds=true"와 같이 입력합니다.

(IMHO는 디폴트로 유효하게 되어 있습니다.왜 유효하게 되어 있지 않은지 알 수 없습니다.

너뿐만이 아니야.Windows 8과 Ubuntu 14.04에서 MariaDB 10.0.13의 문제를 재현할 수 있었습니다.Windows 박스에서 MySQL 5.6.13을 사용한 테스트에서는 두 경우 모두 밀리초가 저장되었습니다.

언급URL : https://stackoverflow.com/questions/25445807/mariadb-jdbc-settimestamp-truncates-milliseconds

반응형