프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

OS환경 : Windows Server 2019 (64bit)

 

DB 환경 : Oracle Database 19.3.0.0

 

에러 : sqlplus 에서 일부문자가 ???로 나올 때 해결 방법(윈도우 환경)

리눅스 환경의 경우 아래 게시글 참조

https://positivemh.tistory.com/751

 

sqlplus 에서 일부문자가 ???로 나올 때 해결 방법

OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : Oracle Database 19.11.0.0 에러 : sqlplus 문자가 ???로 나올 때 해결 방법 db를 구성 할 때 캐릭터셋은 KO16MSWIN949로 설정했지만 아래와 같이 Default lan..

positivemh.tistory.com

 

 

db를 구성 할 때 캐릭터셋은 KO16MSWIN949로 설정했지만

아래와 같이 Default languge와 Defalut territory를 Korean, Korea로 했을 경우

 

 

sqlplus 에서 한글 테이블 생성시 에러가 발생하고

한글 데이터 삽입 시 한글이 ???로 표시됨

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
CMD> sqlplus / as sysdba
SQL> create table 테스트 (컬럼1 varchar2(10));
create table 테스트 (컬럼1 varchar2(10))
             *
1행에 오류:
ORA-00911: ?????? ????????????
 
SQL> create table test (col1 varchar2(10)); );
 
테이블이 생성되었습니다.
 
SQL> insert into test values ('TEST1');
 
1 개의 행이 만들어졌습니다.
 
SQL> insert into test values ('테스트1');
 
1 개의 행이 만들어졌습니다.
 
SQL> commit;
 
커밋이 완료되었습니다.
 
SQL> select * from test;
 
COL1
----------
TEST1
???1

 

 

해결 방법 : os 유저로 NLS_LANG 설정

설치 시 어떤 캐릭터셋을 선택했는지 모르는 경우 nls_database_parameters 뷰 확인

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
SQL>
set lines 200 pages 1000
col PARAMETER for a30
col VALUE for a30
select * from nls_database_parameters;
 
PARAMETER                      VALUE
------------------------------ ------------------------------
NLS_RDBMS_VERSION              19.0.0.0.0
NLS_NCHAR_CONV_EXCP            FALSE
NLS_LENGTH_SEMANTICS           BYTE
NLS_COMP                       BINARY
NLS_DUAL_CURRENCY              ?
NLS_TIMESTAMP_TZ_FORMAT        RR/MM/DD HH24:MI:SSXFF TZR
NLS_TIME_TZ_FORMAT             HH24:MI:SSXFF TZR
NLS_TIMESTAMP_FORMAT           RR/MM/DD HH24:MI:SSXFF
NLS_TIME_FORMAT                HH24:MI:SSXFF
NLS_SORT                       BINARY
NLS_DATE_LANGUAGE              KOREAN
NLS_DATE_FORMAT                RR/MM/DD
NLS_CALENDAR                   GREGORIAN
NLS_NUMERIC_CHARACTERS         .,
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_CHARACTERSET               KO16MSWIN949
NLS_ISO_CURRENCY               KOREA
NLS_CURRENCY                   ?
NLS_TERRITORY                  KOREA
NLS_LANGUAGE                   KOREAN
 
20 행이 선택되었습니다.

 

 

nls_database_parameters 뷰를 조회해서 나온 NLS_LANGUAGE, NLS_TERRITORY, NLS_CHARACTERSET 값을 아래처럼 입력하면됨

sqlplus 를 접속하는 유저로 NLS_LANG 설정

1
2
예시 CMD> export NLS_LANG="NLS_LANGUAGE"_"NLS_TERRITORY"."NLS_CHARACTERSET"
CMD> set NLS_LANG=KOREAN_KOREA.KO16MSWIN949

 

 

sqlplus 접속 후 한글 테이블 생성 및 데이터 삽입 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SQL> create table 테스트 (컬럼1 varchar2(10));
 
테이블이 생성되었습니다.
 
SQL> insert into 테스트 values ('테스트1');
 
1 개의 행이 만들어졌습니다.
 
SQL> insert into 테스트 values ('test1');
 
1 개의 행이 만들어졌습니다.
 
SQL> commit;
 
커밋이 완료되었습니다.
 
SQL> select * from 테스트;
 
컬럼1
----------
테스트1
test1

한글이 정상적으로 삽입되고 조회됨

 

 

sqlplus 접속 후 기존 테이블 데이터 확인 및 삽입

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SQL> select * from test;
 
COL1
----------
TEST1
???1
 
SQL> insert into test values ('테스트2');
 
1 개의 행이 만들어졌습니다.
 
SQL> commit;
 
커밋이 완료되었습니다.
 
SQL> select * from test;
 
COL1
----------
TEST1
???1
테스트2

기존에 삽입했던 한글 데이터는 여전히 ???로 나오고

새로 삽입하는 한글 데이터만 정상적으로 삽입됨

 

 

원인 : 오라클 NLS 설정과 OS NLS_LANG 설정의 차이때문에 발생한 문제

db 생성 시 캐릭터셋을 ko16mswin949로 설정한 뒤 위와 같이 Default languge와 Defalut territory를 Korean, Korea로 설정한 경우 set 명령으로 NLS_LANG를 설정해주어야함

 

 

참조 : https://positivemh.tistory.com/751

 

sqlplus 에서 일부문자가 ???로 나올 때 해결 방법

OS환경 : Oracle Linux 7.6 (64bit) DB 환경 : Oracle Database 19.11.0.0 에러 : sqlplus 문자가 ???로 나올 때 해결 방법 db를 구성 할 때 캐릭터셋은 KO16MSWIN949로 설정했지만 아래와 같이 Default lan..

positivemh.tistory.com