ORACLE 문자 집합은 바이트 데이터를 해석하는 데 사용되는 기호 집합입니다. 이러한 기호는 크기가 다르고 서로 포함되어 있습니다. Oracle 은 현지화된 언어로 데이터를 저장, 처리 및 검색할 수 있는 국가별 언어 아키텍처를 지원합니다. 데이터베이스 도구 오류 메시지 정렬 순서, 날짜, 시간, 통화, 숫자 및 달력을 현지화된 언어 및 플랫폼에 자동으로 적용합니다.
Oracle 데이터베이스 문자 집합에 영향을 주는 가장 중요한 매개변수는 NLS _ lang 매개변수입니다. 형식은 다음과 같습니다.
NLS_LANG = 언어 _ 지역 문자 집합?
여기에는 각각 NLS 하위 집합의 특성을 제어하는 세 가지 구성 요소 (언어 영역과 문자 집합) 가 있습니다.
언어 서버 메시지의 언어 영역 지정 서버 문자 집합의 날짜와 숫자 형식을 지정하여 문자 집합을 지정합니다 (예: AMERICAN _ AMERICA ZHS GBK).
_LANG 의 구성에서 데이터베이스 문자 집합에 실제로 영향을 미치는 것은 실제로 세 번째 부분이므로 두 데이터베이스 간의 문자 집합은 세 번째 부분이 동일하면 서로 가져오고 내보낼 수 있습니다. 프롬프트 정보만 중국어 또는 영어입니다.
둘째, 오라클 문자 세트를 쿼리하는 방법
많은 사람들이 서로 다른 문자 집합으로 인해 데이터를 가져오지 못하는 경우가 많습니다. 여기에는 세 가지 문자 세트가 포함됩니다. 하나는 Oracle 서버의 문자 세트이고 다른 하나는 Oracle 클라이언트의 문자 세트입니다. 셋째, 데이터를 가져올 때 DMP 파일의 문자 세트가 세 문자 세트와 일치해야 제대로 가져올 수 있습니다.
Oracle 서버의 문자 집합을 질의합니다.
Oracle 서버의 문자 집합을 찾는 방법에는 여러 가지가 있습니다. 직관적인 쿼리 방법은 다음과 같습니다. SQL >;; Dual 에서 userenv (언어) 를 선택합니다.
결과는 다음과 같습니다: 미국 미국 ZHS GBK
Dmp 파일의 문자 세트를 질의하는 방법
Oracle 의 exp 툴을 사용하여 익스포트된 DMP 파일에는 문자 집합 정보도 포함되어 있습니다. Dmp 파일의 첫 번째 바이트와 두 번째 바이트는 DMP 파일의 문자 세트를 기록합니다. Dmp 파일이 크지 않은 경우 (예: 몇 미터 또는 수십 미터) UltraEdit (이진 모드) 로 열어 첫 번째 바이트의 내용을 볼 수 있습니다. 예를 들어, 다음 SQL 을 사용하여 해당 문자 세트를 찾을 수 있습니다.
Sql> select nls _ charset _ name (to _ number (xxxx)) from dual; -응?
ZHS·GBK
G 이상 등 DMP 파일이 큰 경우 (가장 일반적인 경우) 텍스트 편집기를 사용하여 느리거나 완전히 열 때 다음 명령 (UNIX 호스트) 을 사용할 수 있습니다.
카터 펠러 exp DMP | od x | head | awk {print $ $} | cut C.
그런 다음 위의 SQL 을 사용하여 해당 문자 세트를 얻을 수 있습니다.
Oracle 클라이언트의 문자 집합을 질의합니다.
이것은 비교적 간단하다. Windows 플랫폼의 경우 레지스트리에서 해당 Oracle 홈의 NLS_LANG 입니다. Dos 창에서 직접 설정할 수도 있습니다. 예를 들면 다음과 같습니다.
Set nls _ lang = American _ America zhsgbk?
이 창의 환경 변수에만 영향을 줍니다.
유닉스 플랫폼의 경우 환경 변수 UNIX _ lang 입니다.
$ 에코 $ NLS _ 랑
미국 ZHS GBK
검사 결과 서버와 클라이언트의 문자 세트가 일치하지 않는 것으로 나타나면 서버와 동일한 문자 세트로 변경합니다.
셋째, 오라클 문자 세트를 수정합니다
앞서 언급했듯이 갑골문의 문자 세트는 서로 포용한다. 예를 들어 us ascii 는 zhs gbk 의 하위 세트입니다. Us ascii 에서 zhs gbk 까지 데이터 해석 문제와 데이터 손실이 발생하지 않습니다. Utf 는 유니코드 더블바이트 기반 문자를 저장하기 때문에 모든 문자 세트에서 가장 커야 합니다. 따라서 저장 공간이 더 많이 사용됩니다.
데이터베이스가 만들어지면 데이터베이스의 문자 집합은 이론적으로 변경할 수 없으므로 설계 설치 초기에 어떤 문자 세트를 사용할지 고려하는 것이 중요합니다. Oracle 의 공식 선언에 따르면 문자 세트를 하위 세트에서 상위 세트로 또는 그 반대로 변환할 수 있습니다. 두 문자 집합 간에 관계가 없는 경우 Oracle 은 문자 집합 변환을 지원하지 않습니다. 이는 데이터베이스 서버에 대한 잘못된 수정입니다. 문자 집합은 예측할 수 없는 많은 결과를 초래할 수 있으며 데이터베이스의 정상적인 작동에 심각한 영향을 줄 수 있습니다. 따라서 수정하기 전에 두 문자 세트 사이에 서브셋과 수퍼 세트 관계가 있는지 확인해야 합니다. 일반적으로 Oracle 데이터베이스 서버측 문자 집합, 특히 가장 일반적으로 사용되는 두 문자 집합인 ZHS·GBK 와 ZHS·CGB 사이에는 부분 집합과 수퍼 집합 관계가 없으므로 이론적으로 두 문자 집합 간의 상호 변환은 지원되지 않습니다.
서버측 문자 세트 수정 (권장하지 않음)
Oracle 이전에는 데이터 딕셔너리 테이블 props$ 를 직접 수정하여 데이터베이스의 문자 집합을 변경할 수 있었습니다. 그러나 Oracle 이후 최소한 세 개의 시스템 테이블이 데이터베이스 문자 집합에 대한 정보를 기록합니다. 테이블 소품 $ 을 바꾸면 심각한 결과를 초래할 수 있습니다. 올바른 수정 방법은 다음과 같습니다.
$sqlplus /nolog
SQL & gtconn/as SYSDBA;; -응?
이 시점에서 데이터베이스 서버가 시작되면 먼저 SHUTDOWN IMMEDIATE 명령을 실행하여 데이터베이스 서버를 종료한 후 다음 명령을 실행합니다.
SQL> 부트 마운트;
SQL & gtALTER SYSTEM 은 제한된 세션을 활성화합니다.
Sql> alter system setjob _ queue _ processes =;
SQL> 시스템 설정 변경 AQ 프로세스 =;
SQL> 데이터베이스 열기;
SQL> 데이터베이스 문자 세트 ZHS GBK; 변경;
SQL> 데이터베이스 국가별 문자 세트 변경 ZHS GBK;;
SQL> 즉시 종료;
SQL> 창업?
Dmp 파일 문자 세트 수정
앞서 언급했듯이 DMP 파일의 첫 번째 바이트는 문자 세트 정보를 기록하므로 DMP 파일의 첫 번째 바이트 내용을 직접 수정하면 Oracle 검사를 속일 수 있습니다. 이론적으로는 서브셋에서 수퍼 세트로만 수정할 수 있지만, 대부분의 경우 일부 공통 문자 세트는 서브셋과 수퍼 세트 관계 없이 수정할 수 있습니다 (예: US ASCII WE ISO P ZHS CGB ZHS GBK). DMP 파일만 수정할 수 있기 때문에 기본적으로 수정할 수 있기 때문에 영향이 크지 않습니다.
구체적인 수정 방법은 여러 가지가 있습니다. 가장 쉬운 방법은 UltraEdit 를 사용하여 DMP 파일의 첫 번째 바이트와 첫 번째 바이트를 직접 수정하는 것입니다. 예를 들어, DMP 파일의 문자 세트를 ZHS·GBK 로 변경하려면 다음 SQL 을 사용하여 해당 문자 세트의 이진 코드를 찾을 수 있습니다.
Sql> select to _ char (nls _ charset _ id (zhs gbk) xxxx) from dual;
-응?
그런 다음 DMP 파일의 바이트를 다음과 같이 수정합니다
Lishi Xinzhi/article/program/Oracle/201311//kloc-