사용자 도구

사이트 도구


database:mysql:5.6

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
마지막 판 양쪽 다음 판
database:mysql:5.6 [2014/11/30 20:06]
kwon37xi [fractional seconds 지원]
database:mysql:5.6 [2022/02/11 13:05]
kwon37xi [fractional seconds 반올림 문제 해결책]
줄 2: 줄 2:
 설치 후 [[database:mysql:charset|MySQL charset encoding]] 설정 해줄 것. 설치 후 [[database:mysql:charset|MySQL charset encoding]] 설정 해줄 것.
  
-===== Ubuntu 14.04 Trusty Tahr 부터 5.6 지원 ===== 
-<code sh> 
-sudo apt-get install mysql-server-5.6 mysql-client-5.6 
-</code> 
  
 ===== 5.5만 지원하는 Ubuntu에 설치하기 ===== ===== 5.5만 지원하는 Ubuntu에 설치하기 =====
 +  * 더이상 불필요함. [[database:mysql|MySQL]]에서 Repository 참조.
   * MySQL 5.5가 기본인 Ubuntu 버전에서 5.6을 설치하기   * MySQL 5.5가 기본인 Ubuntu 버전에서 5.6을 설치하기
   * [[https://launchpad.net/~ondrej/+archive/mysql-5.6|MySQL 5.6 PPA]]   * [[https://launchpad.net/~ondrej/+archive/mysql-5.6|MySQL 5.6 PPA]]
줄 27: 줄 24:
  
 ===== fractional seconds 지원 ===== ===== fractional seconds 지원 =====
-  * fractional seconds 라는 것은 milliseconds, nanoseconds를 뜻하는 것으로 보임.+  * fractional seconds 라는 것은 초(second)보다 작은 단위인 milliseconds, nanoseconds를 뜻하는 것으로 보임.
   * [[http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html|MySQL :: MySQL 5.6 Reference Manual :: 11.3.6 Fractional Seconds in Time Values]]   * [[http://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html|MySQL :: MySQL 5.6 Reference Manual :: 11.3.6 Fractional Seconds in Time Values]]
   * 5.6 부터 이를 지원하지만, 컬럼을 ''DATETIME(6)''으로 생성해야 한다.   * 5.6 부터 이를 지원하지만, 컬럼을 ''DATETIME(6)''으로 생성해야 한다.
줄 33: 줄 30:
   * ''DATETIME(6)'' - fractional second 6자리까지 지원   * ''DATETIME(6)'' - fractional second 6자리까지 지원
   * 그냥 ''DATETIME''(기본으로 ''0''이 지정됨)일 경우 **fractional second 부분이 반올림** 되는 현상이 일어난다.   * 그냥 ''DATETIME''(기본으로 ''0''이 지정됨)일 경우 **fractional second 부분이 반올림** 되는 현상이 일어난다.
-  따라서 냥 ''DATETIME''에서 반올림 현상을 없애려면 Hibernate Interceptor나 JPA Entity Listener 등의 차원에서 millisecond 이하를 잘라버려야 한다.+    정확히 말하면 컬럼의 밀리세컨드 자리수가 입력데이터보다 적을 때 반올림이 일어나며, 
 +    * 이 현상은 SQL 표준에 의거한 것이며 버가 아니라고 한다. 
 + 
 +===== fractional seconds 반올림 문제 해결책 ===== 
 +  * ''DATETIME''에서 반올림 현상을 없애려면 Hibernate Interceptor나 JPA Entity Listener 등의 차원에서 millisecond 이하를 잘라버려야 한다. 
 +  * [[https://gist.github.com/kwon37xi/9205428|MySQL 5.6의 DATETIME ms 반올림 버그와 구버전 JDBC 드라이버의 ms 절삭 버그 조합]] 
 +  * [[https://dev.mysql.com/doc/relnotes/connector-j/5.1/en/news-5-1-37.html|MySql Connector/J 5.1.37]] 에 **'' sendFractionalSeconds=true|false''** 프라퍼티가 추가 되었다. 이를 통해 JDBC Driver 차원에서 fractional seconds를 전송하지 않게 ''false'' 옵션을 지정하면 ''datetime(0)''에서도 반올림 현상을 막을 수 있다. 
 + 
 +> A new connection property, sendFractionalSeconds=true|false, has been introduced. It controls whether fractional seconds in timestamps are to be truncated on the client side or to be sent to the server side for truncation there. See the entry for the new property in [[https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html|Configuration Properties for Connector/J]] for details. Thanks to **Kwon Nam Son** for contributing the code. (Bug #21304726, Bug #77449) 
 + 
 +  * 혹시나 ''true|false''간의 성능차이가 매우 큰지 여부를 테스트해 보았는데, 차이 거의 없었다. [[https://github.com/kwon37xi/mysql-jdbc-send-fractional-seconds|mysql-jdbc-send-fractional-seconds performance test]] 
 +  * [[https://github.com/mysql/mysql-connector-j/commit/8a7a7e8b85b6893c2dd2cca25cfae59a81a148b3| Fix for Bug#77449 (21304726) Add 'truncateFractionalSeconds=true|false' property (contribution).]] 
 +  * [[https://bugs.mysql.com/bug.php?id=77449|MySQL Bugs: #77449: Add 'truncateFractionalSeconds=true|false' property (contribution)]] 
 +  * [[database:mariadb|MariaDB]] Connector/J의 경우 ''useFractionalSeconds=false''로 지정하면 millisecond를 전송하지 않는다. 
 +  * [[https://dev.mysql.com/doc/connector-j/8.0/en/ch06s06s02.html|MySQL :: MySQL Connector/J 8.0 Developer Guide :: 6.6.2 Fractional Seconds]]
database/mysql/5.6.txt · 마지막으로 수정됨: 2022/03/15 10:59 저자 kwon37xi