programing

Oracle에서 N'String' 리터럴과 U'String' 리터럴의 차이

padding 2023. 6. 12. 21:11
반응형

Oracle에서 N'String' 리터럴과 U'String' 리터럴의 차이

이 쿼리들 사이의 의미와 차이점은 무엇입니까?

SELECT U'String' FROM dual;

그리고.

SELECT N'String' FROM dual;

이 답변에서 저는 공식 자료로부터 정보를 제공하려고 노력할 것입니다.

N' 텍스트 리터럴

N''을 문열을변데사용니다됩는으로 하는 데 됩니다.NCHAR또는NVARCHAR2 유형

이 오라클 문서에 따르면 오라클 - 리터럴

텍스트 리터럴의 구문은 다음과 같습니다.

여기에 이미지 설명 입력

N또는n집합을 합니다(" 문자집사지리다니정합을국터럴여용하합가을(다▁specifies▁the니국NCHAR또는NVARCHAR2데이터).

이 두 번째 기사에서도 오라클 - 데이터 유형

N'String'을 문열을변데사용니다됩는으로 하는 데 됩니다.NCHAR 유형

위에 나열된 기사에서:

에서는 다예다비다니합을 합니다.translated_descriptionpm.product_descriptions국가 문자 집합 문자열이 있는 테이블:

SELECT translated_description FROM product_descriptions
  WHERE translated_name = N'LCD Monitor 11/PM';

더 유' 리터럴

U'' Interface)OCI(Oracle Call Interface)에서 하는 데 됩니다.

유니코드를 사용한 이 오라클 문서 프로그래밍을 기반으로 합니다.

OCI(Oracle Call Interface)는 나머지 클라이언트 측 데이터베이스 액세스 제품이 사용하는 가장 낮은 수준의 API입니다.C/C++ 프로그램이 SQL에 저장된 유니코드 데이터에 액세스할 수 있는 유연한 방법을 제공합니다.CHAR그리고.NCHAROCI하여 삽입 또는 방식으로 할 수 있습니다.OCI를 사용하여 삽입하거나 검색할 데이터의 문자 집합(UTF-8, UTF-16 등)을 프로그래밍 방식으로 지정할 수 있습니다.Oracle Net을 통해 데이터베이스에 액세스합니다.

OCI는 데이터베이스에 액세스하기 위한 가장 낮은 수준의 API이므로 최고의 성능을 제공합니다.

OCI에서 SQL NCAR 문자열 리터럴 처리

환 변 를 설 켤 수 있 니 습 다 여 경 하 정 수 ▁the ▁setting ▁it ▁by ▁on ▁variable ▁you ▁switch 다 니 ▁can ▁environ 있 환경 습ORA_NCHAR_LITERAL_REPLACETRUE또한 다음을 사용하여 프로그래밍 방식으로 이 동작을 수행할 수 있습니다.OCI_NCHAR_LITERAL_REPLACE_ON그리고.OCI_NCHAR_LITERAL_REPLACE_OFF를 드모의로 표시합니다.OCIEnvCreate()그리고.OCIEnvNlsCreate()를 들면, 를들어예,,OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_ON)짐켜를 NCHAR 그대로 치환,에 문그대바꾸기반, 면자로OCIEnvCreate(OCI_NCHAR_LITERAL_REPLACE_OFF)전원을 끕니다.

[...] 참고로, 다음과 같은 경우.NCHAR문자 교체가 켜져 있습니다.OCIStmtPrepare그리고.OCIStmtPrepare2 SQL 텍스트에 리터럴이 포함된 리터럴을 변환하고 결과 SQL 텍스트를 문 핸들에 저장합니다.따라서 응용 프로그램이 다음을 사용하는 경우OCI_ATTR_STATEMENT에서 SQL 텍합다에서 SQL 합니다.OCI문 핸들을 사용하면 원본 텍스트에 지정된 대신 SQL 텍스트가 반환됩니다.


질문에 대한 답변

데이터 유형의 관점에서 제공된 두 쿼리 간에 차이가 없습니다.

  • N'string'방금 돌려드립니다.string~하듯이NCHAR유형.

  • U'string'반품 또한NCHAR유형, 그러나 그것은 추가적인 처리를 합니다.string대체합니다.\\와 함께\그리고.\xxxx유니코드 코드 포인트 사용U+xxxx,어디에xxxx4자리 16진수입니다.이는 다음과 비슷합니다.UNISTR('string')차이점은 후자가 돌아온다는 것입니다.NVARCHAR2.

U'리터럴은 인코딩 및 NLS 설정과 독립적으로 유니코드 문자열을 사용하려는 경우 유용합니다.

예:

select n'\€', u'\\\20ac', n'\\\20ac' from dual;

N'\€' U'\\\20AC' N'\\\20AC'
----- ---------- ----------
\€    \€         \\\20ac

사용 시N'우리는 주어진 데이터 유형이NCHAR또는NVARCHAR.

U'유니코드를 나타내는 데 사용됩니다.

문서화된N''리터럴은 표준 문자 리터럴과 동일합니다(''데이터 유형이 VARCHAR2가 아닌 NVARCHAR2인 경우를 제외합니다.이러한 리터럴의 문자는 전체 SQL 문과 함께 서버로 전송될 때 클라이언트 문자 집합에서 데이터베이스 문자 집합으로 변환됩니다.데이터베이스 문자 집합에서 지원되지 않는 리터럴의 모든 문자가 손실됩니다.

되지 않은 문되지데의 입니다.U''리터럴도 NVARCHAR2입니다.U''의 입력과 같이 해석됩니다.UNISTR기능. 즉, 각문시입니다.\xxxx각각 어디에x는 1개의 16진수로, UTF-16 코드 포인트 U+xxxxx로 해석됩니다.나는 왜 그런지 잘 모르겠습니다.U''리터럴은 문서화되지 않았습니다.추측만 할 뿐입니다. 교체으로 NCAR 문자 교체 기능이 됩니다.N''에 대한 리터럴.U''유니코드가 할 수 .이렇게 하면 문자 집합 변환으로 인해 언급된 데이터 손실을 방지하고 데이터베이스 문자 집합이 유니코드가 아닌 경우에도 NVARCHAR2 열에 리터럴 유니코드 데이터를 제공할 수 있습니다.

이 스레드의 질문에 있는 두 쿼리는 일반적으로 동일하지 않습니다. 문자 그대로의 텍스트가 다르게 해석되기 때문입니다.그러나 리터럴에 백슬래시가 없으면 차이를 관측할 수 없습니다.

언급URL : https://stackoverflow.com/questions/48076425/difference-between-nstring-vs-ustring-literals-in-oracle

반응형