프로그램에서 JDBC 를 사용하여 MSSQL 연동하고, MyBatis를 사용하는 경우, MyBatis로 파라미터를 전달할때,
MSSQL JDBC 드라이버는 String 타입의 파라미터를 기본적으로 NVARCHAR 로 매핑한다.
VARCHAR 타입의 인덱스가 있을 경우, NVARCHAR로 매핑되면 인덱스를 제대로 참조하지 못하는 경우가 있다.
이 경우, DB Lock 이 발생하거나, CPU를 많이 사용하는 쿼리가 발생할 수 있다.
String 타입 파라미터를 NVARCHAR 타입이 아닌, VARCHAR 타입으로 전달하려면
1. JDBC URL 에 sendStringParametersAsUnicode=false 를 추가하면, 기본으로 VARCHAR 타입으로 매핑된다.
2. 쿼리 파라미터에 타입을 정해 주거나, 상수로 전달하는 방법도 있다.
2.1 SELECT * FROM 테이블명 WITH(NOLOCK)
WHERE A = #{필드명, jdbcType = VARCHAR};
2.2 SELECT * FROM 테이블명 WITH(NOLOCK)
WHERE A = ${필드명}
1번 방법을 사용할때, 기존에 암호화하여 저장된 경우, NVARCHAR로 전달되어 암호화한 데이터와, VARCHAR 로 전달되어 암호화한 데이터가 서로 다르므로 운영 적용전에 확인이 필요하다.
'프로그래밍 > JAVA' 카테고리의 다른 글
로컬에서 HTTPS 사용하기 위한 인증서 발급 및 톰캣 server.xml 설정 (0) | 2025.03.21 |
---|---|
[JSP] meta tag 변경 후 카카오톡에 반영이 안되는 경우 (0) | 2025.01.13 |
[WEB] 페이지 로딩시 특정기간 동안 레이어 팝업 표시 (1) | 2024.11.19 |
[JAVA] 문자열 ENCODING 확인 (1) | 2024.11.04 |
[인텔리제이 IDE] 심볼을 찾을 수 없습니다. Cannot resolve symbol. 해결 방법 (0) | 2024.01.18 |
댓글