본문 바로가기
Database/Oracle

literal does not match format string ORA-01861 해결방법 / 리눅스 캐릭터셋 변경

by 나비와꽃기린 2019. 10. 8.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

[문제]

같은 소스인데도 불구하고 테스트계에서는 에러가 발생하지 않았지만 운영계에서 ORA-01861 에러가 발생했다.

에러로그는 --> (literal does not match format string)

 

[이유]

OSLANG 설정이 달라서 문자열을 묵시적으로 날짜로 변환을 못해서 발생하는 에러라고 한다.

( 리눅스 문자셋(캐릭터셋) )

보통 서버를 교체하고 나서 LANG에 관련된 설정을 하지 않거나

비교하는 대상의 두 서버의 LANG설정이 다르면 발생한다.

내 경우에는 테스트계는 기존에 사용하던 서버였고, 운영계는 이번에 신설된 서버였다.

LANG 설정이 누락된 듯 싶어서

테스트계와 운영계의 LANG 설정을 각각 확인해보았다.

 

<테스트계 LANG 설정>

 

 

<운영계 LANG설정>

 

 

 

[해결방법]

1. 서버의 LANG 설정을 에러가 나지 않는 환경의 설정으로 동일하게 맞춰줌

 

2. 에러가 나는 쿼리에 분명히 TO_DATE나 TO_CHAR 함수의 사용이 있을거고

분명  TO_DATE(#start_date#) 이런식으로 날짜형식에 대한 정의가 빠져있을 것이다.

따라서 TO_DATE, TO_CHAR 사용한 부분들을 찾아 명시적으로 프로그래밍을 해주면 해결된다.

Ex) STAT_DATE >= TO_DATE(#start_date#)

    STAT_DATE >= TO_DATE(#start_date#,'YYYYMMDD')

 

기본적으로 코딩할 때, DATE 타입을 넣어서 코딩을 하는 것이 바람직한 방법이다(!)

이미 수년 동안 서비스되어 있던 제품이면서, 소스 수정량 과 테스트건이 많고

서비스 정책상 ko_KR.UTF-8이 맞다고 하여 1번으로 환경변경을 하기로 함.

 

 

캐릭터셋, LOCALE 변경방법은 아래 포스팅 참고.

정리해둔게 있었네.

https://mkil.tistory.com/374?category=611232

 

[Linux] 로케일 설정 확인 및 변경

리눅스를 쓰다보면 서버 시간 설정이나 언어 설정등의 문제로 로케일을 설정해야 할때가 있습니다. 특히 AWS의 아마존 리눅스는 기본적으로 en_US 로케일이어서 변경하셔야합니다. 저는 항상 아마존 기준으로 테스..

mkil.tistory.com