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
'programing' 카테고리의 다른 글
일광 절약 시간을 염두에 두고 반복되는 날짜를 저장하는 방법 (0) | 2022.10.04 |
---|---|
.then() 체인으로 이전 약속 결과에 액세스하려면 어떻게 해야 합니까? (0) | 2022.09.28 |
PHP 네임스페이스 및 "사용" (0) | 2022.09.28 |
마젠토는 왜 이렇게 느려? (0) | 2022.09.28 |
익명 재귀 PHP 함수 (0) | 2022.09.28 |