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_description
열pm.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
그리고.NCHAR
OCI를 하여 삽입 또는 방식으로 할 수 있습니다.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_REPLACE
TRUE
또한 다음을 사용하여 프로그래밍 방식으로 이 동작을 수행할 수 있습니다.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
,어디에xxxx
4자리 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
'programing' 카테고리의 다른 글
워드프레스: 한 페이지가 두 부모를 가질 수 있을까요? (0) | 2023.06.12 |
---|---|
C 및 C++의 문으로서의 선언/정의 (0) | 2023.06.12 |
Oracle PL/SQL - 즉시 출력/콘솔 인쇄를 위한 팁 (0) | 2023.06.12 |
행의 비어 있지 않은 마지막 셀 가져오기 (0) | 2023.06.12 |
메시지의 메시지에 대해 Vuex 저장소를 업데이트하는 방법세트 (0) | 2023.06.12 |