programing

NLS_NCHAR_CHARACSET과 NLS_CHARACSET for Oracle 간의 차이

javamemo 2023. 7. 24. 22:10
반응형

NLS_NCHAR_CHARACSET과 NLS_CHARACSET for Oracle 간의 차이

사이의 차이점을 알고 싶습니다.NLS_NCHAR_CHARACTERSET그리고.NLS_CHARACTERSETOracle 설정?

제가 알기로는NLS_NCHAR_CHARACTERSET을 위한 것입니다.NVARCHAR데이터 유형 및 대상NLS_CHARACTERSETVARCHAR2 데이터 유형용입니다.

현재 설정된 개발 서버에서 테스트하려고 했습니다.CHARACTERSET다음과 같습니다.

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_NCHAR_CHARACTERSET         AL16UTF16
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               US7ASCII

그런 다음 데이터베이스에 한자 값을 몇 개 삽입했습니다.라는 표에 문자를 삽입했습니다.data_<seqno>다음에 대한 열을 업데이트했습니다.ADDRESS그리고.ADDRESS_2어느 쪽이VARCHAR2현재 설정에 대한 제 이해로는 그렇습니다.NLS_CHARACTERSET US7ASCII한자는 지원되지 않아야 하지만 여전히 데이터베이스에 표시됩니다.한다NLS_NCHAR_CHARACTERSET이것보다 우선입니까?

감사해요.

일반적으로 당신의 모든 요점은 정확합니다.NLS_NCHAR_CHARACTERSET다음에 대한 문자 집합을 정의합니다.NVARCHAR2기타. 예를 들어 열 반면에NLS_CHARACTERSET에 사용됩니다.VARCHAR2.

왜 당신이 한자를 보는 것이 가능합니까?US7ASCII?

그 이유는 데이터베이스 문자 집합과 클라이언트 문자 집합입니다(예: 참조).NLS_LANG값)는 둘 다입니다.US7ASCII데이터베이스에서 사용하는 항목US7ASCII클라이언트가 데이터를 전송할 때는 다음을 사용합니다.US7ASCII따라서 문자열을 변환하지 않고 데이터가 클라이언트에서 서버로 비트 단위로 전송되며 그 반대도 마찬가지입니다.

이로 인해 실제로 지원되지 않는 문자를 사용할 수 있습니다.US7ASCII클라이언트가 다른 문자 집합을 사용하는 경우(예: ODP를 사용하는 경우)에 주의하십시오.윈도우즈 응용 프로그램의 NET Managed Driver) 데이터는 쓰레기입니다!또한 데이터베이스 문자 집합 마이그레이션을 고려할 경우에도 동일한 문제가 발생합니다.

다른 참고 사항:예를 들어 데이터베이스와 클라이언트가 모두 사용하는 경우와 같이 다른 문자 집합에서 동일한 동작을 사용하지 않을 것이라고 생각합니다.WE8ISO8859P1예를들면.또한 실제로 잘못된 구성을 가지고 있습니다.데이터베이스에서 문자 집합 사용US7ASCII,당신의.NLS_LANG가치 또한US7ASCII(아마도 전혀 설정되어 있지 않고 Oracle 기본값은 다음과 같습니다.)US7ASCIISQL*Plus의 실제 문자 집합, resp.당신의.cmd.exe터미널은 CP950 또는 CP936일 가능성이 높습니다.

모든 것을 올바르게 설정하려면 환경 변수를 설정할 수 있습니다.NLS_LANG=.ZHT16MSWIN950(CP936은 Oracle에서 지원되지 않는 것으로 보임) 또는 실행하기 전에 코드 페이지를 변경합니다.sqlplus.exechcp 437이 올바른 설정을 사용하면 예상했던 것처럼 중국어 문자를 볼 수 없습니다.

언급URL : https://stackoverflow.com/questions/36710360/difference-between-nls-nchar-characterset-and-nls-characterset-for-oracle

반응형