일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- @EntityListeners
- @CreateDate
- EmbeddedId
- mysql =
- 1*1000
- deserializer
- fractional seconds
- createEntityGraph
- sendFractionalSeconds
- yml
- MSSQL
- apatch poi
- mysql not equal null
- RootGraph
- 버전 문자열 비교
- +9:00
- load order
- 운동해서 광명찾자
- 오블완
- pooled-lo
- Protecle
- AuditingEntityListener
- MYSQL
- mysql equal null
- NamedEntityGraph
- getEntityGraph
- spring boot
- https
- getDateCellValue
- 티스토리챌린지
- Today
- Total
목록DB (17)
Hello
LEFT JOIN을 사용해 기간 검색이 필요한 JOIN 쿼리에서 인덱스를 설정하기 위해 기간 컬럼과 ON 절에 사용하는 컬럼을 복합 인덱스로 만들지, 아니면 기간 검색을 위한 컬럼만 인덱스로 설정할지 고민한 내용을 정리하고자 합니다.Nested-Loop Join의 동작 방식드라이빙 테이블에서 각 행을 선택합니다.드리븐 테이블에서 선택된 행과 일치하는 행을 찾습니다.일치하는 행이 있으면 결과 집합에 추가합니다.드라이빙 테이블의 모든 행에 대해 반복합니다.INNER JOININNER JOIN에서는 두 테이블 간의 일치하는 레코드만 반환합니다.드라이빙 테이블: 첫 번째 테이블의 각 행을 선택합니다.드리븐 테이블: 두 번째 테이블에서 인덱스를 사용하여 일치하는 행을 찾습니다.INNER JOIN에서 드라이빙 테이..
Charset(문자 집합) 문자열 데이터를 어떻게 해석하고 저장할지를 결정하는 규칙MySQL 5.7 이하는 latin1, MySQL 8은 utf8mb4Collation은 특정 문자 셋(Character set)에 의해 저장된 값을 비교하기 위해 사용하는 규칙의 집합 해외 프로젝트를 진행중 닉네임 조회 결과가 의도와 다르게 동작하는 이슈가 발생했습니다.ex) 아래 예시들이 구분되어 조회되지않음영어닉네임 : abc닉네임 : ABC대만어닉네임 : tong닉네임 : tóng베트남어닉네임 : ma닉네임 : má 대소문자 및 성조 관련 이슈가 있었는데, 해당 프로젝트는 mysql 8 기본 collation(utf8mb4_0900_ai_ci)을 사용하고 있었습니다. utf8mb4_0900_ai_ci는 위의 예시와..
StatementCallback; SQL []; Zero date value prohibited; nested exception is java.sql.SQLException: Zero date value prohibited 발생 해결 방법상황 : 조회 시 DataReadException: Zero date value prohibited 발생원인 : db에 0000-00-00 값이 있는 데이터 확인. JDBC에서 값 바인딩 시 JAVA에서는 표현이 불가능해 에러가 발생. 해결 방법 : jdbc url 에 zeroDateTimeBehavior= CONVERT_TO_NULL 옵션 설정- 기본값이 exception으로 되어 DataReadException: Zero date value prohibited 발생-..
팀에서 운영되고 있던 스케줄러가 동작하지 않는 다는 이슈를 전달 받아 확인해 보니 실행 중 DuplicateKeyException이 발생해 마무리되지 않고 종료된 것을 확인했다.타 팀에서 우리 팀 스케줄러를 위한 테이블에 데이터를 넣어주는 작업을 진행 했고, qa에 이슈가 없어 real에 반영을 했는데 우리 팀 스케줄러 실행 시 에러가 발생했다.데이터를 확인해보니 중복 된 데이터는 존재하지 않아 위 이슈가 발생한 것이 의아했다. 스케줄러 동작 과정은 아래와 같다.1. 스케줄에 맞는 데이터 확인2. 있을 경우 2-1. id값을 1000건 씩 조회 2-2. 이벤트 테이블에 id 저장 2-3. 이벤트 기간 테이블에 기간 변경...id가 없을 때 까지 반복3. 없을 경우 종료2-2를 처리 하는 도중 Dup..
이 글은 MySQL 8, Connector/J 8 버전을 기준으로 작성됩니다.MySQL 8MySQL 8.0.19부터는 TIMESTAMP, DATETIME 테이블에 삽입할 때 시간대 오프셋을 지정할 수 있습니다.TIMESTAMPUTC에서 UTC까지 범위 ( '1970-01-01 00:00:01''2038-01-19 03:14:07' )저장을 위해 세션 시간대에서 UTC로 변환하고 검색을 위해 UTC에서 세션 시간대로 다시 변환합니다. 저장한 후 시간대를 변경하고 검색하는 경우 검색된 값은 저장한 값과 다릅니다. 이는 양방향 변환에 동일한 시간대가 사용되지 않았기 때문에 발생합니다. DATETIME지원 범위 ( '1000-01-01 00:00:00''9999-12-31 23:59:59' )TIMESTAMP,..
, != 같이 안음 연산자 사용 시 Null 값은 제외하고 조회 하는 것을 알게되어 간단하게 정리하려고 합니다. ,!= 같지 않음 연산자 아래 테이블을 예시로 내용을 정리해보려고합니다. 예) 2000이 아닌 레코드 조회 : 4개의 레코드가 조회 될 것을 기대했으나, id 5만 조회가 되었습니다. 방법 1 null 값에 대한 조건을 포함 조회될 수 있도록 해야합니다. 논리 연산자 우선 순위에 따라 결과값이 달라질 수 있어 ()로 조건을 묶어주는 것이 좋습니다. SELECT * FROM tb_null_test WHERE (CODE IS NULL OR CODE 2000); 방법 2 NOT, 연산자를 사용해 비교하는 방법 null-safe 동일 성비교 연산자와 not 연산자를 사용해 2000이 아닌 값(null..
다량 조회 시 기존에는 이슈가 없었는데 에러가 난다는 확인 요청이 들어왔습니다. 에러를 확인해 보니 sql server는 최대 2100개 매개변수를 지원하는데 그 이상 바인딩 되었다는 에러였습니다. 해당 프로젝트는 sql server를 사용하지 않는 것으로 알고 있었는데 소스를 확인해 보니 동료분이 요청사항을 반영해 sql server를 사용 하고 있었습니다. 아래 공식 문서의 일부입니다. sql server 2008에서 최대 2100개의 매개변수를 가질 수 있다는 내용을 확인 할 수 있었습니다. 참고 : https://stackoverflow.com/questions/656167/hitting-the-2100-parameter-limit-sql-server-when-using-contains https..
MySql 에서 소수초를 사용하지 않는 시간 데이터 타입의 경우 LocalTime.MAX 시간으로 데이터 생성 시 다음날 00:00:00 로 저장되는 이슈가 있었고 초 단위 이하 값을 다루지 않는 데이터였기에 23:59:59 로 저장하도록 수정 대응한적이 있습니다. ex ) 2023-09-05 23:59:59.999... -> 2023-09-06 00:00:00 또한, LocalDateTime.now()를 사용하는 경우 현재 날짜 시간을 생성하기 때문에 소수초가 반올림 될 수도 있습니다. ex) 2023-09-05 13:13:45.584668789 -> 아래 이미지 소수 초를 쓰는 데이터 타입의 경우 값에 따라 소수 초단위 or 초단위로 반올림 될 수 있고, 소수 초를 쓰지 않는 데이터 타입의 경우 초 ..
어플리케이션에서 db 연결을 위해 datasource 작성 시 jdbc driver를 선택합니다. MySql의 경우 com.mysql.cj.jdbc.Driver, com.mysql.jdbc.Driver 둘 중 하나를 사용합니다. 이 둘의 차이는 사용하는 MySql connector의 버전입니다. Connector/J 5.x : com.mysql.jdbc.Driver Connector/J 8.x : com.mysql.cj.jdbc.Driver 아래 공식 문서를 확인하면 버전이 변경되며 클래스 및 인터페이스 명칭 변경 된 것을 확인할 수 있습니다. 참고 : https://dev.mysql.com/doc/connector-j/8.1/en/connector-j-api-changes.html
회사에서 동료분이 MySql datetime 처리 시 소수점 시간이 반올림된다는 내용을 공유해주셨습니다. 그래서 공식문서를 보며 테이블을 만들고 테스트한 내용을 기록하고자 글을 작성합니다. 공식문서를 보면 Mysql은 6자리의 소수 초(microSecond)를 time, datetime,timestamp 데이터 타입 사용시 지원한다고 명시되어있습니다. 아래 작성 부터는 소수초를 ms라고 칭하겠습니다. ms 설정은 0~6 범위 내의 값이어야하고, 0은 ms 없음을 의미하고, 생략하면 ms는 0입니다. 아래 쿼리에서 date_start는 ms 사용 X, date_end는 ms 6자리를 사용하도록 작성했습니다. CREATE TABLE `tb_test` ( `date_start` DATETIME NOT NULL..