그러나 varchar의 정의에 따르면 유니 코드가 아닌 문자열 데이터를 사용할 수 있습니다. 그러나 상표 (™) 및 등록 (®) 기호는 유니 코드 문자 입니다. 정의가 varchar 데이터 유형의 속성과 모순됩니까?
다른 답변은 정확하지 않지만 기본 용어의 혼란을 지적하는 것이 도움이 될 것이라고 생각합니다. 나는이 혼동의 예로써 위의 인용문에서 두 단어를 강조했다. 은 SQL Server 설명서는 유니 코드와 비 유니 코드로 말할 때 데이터 , 그들은되어 있지 에 대해 이야기 문자 . 그들은 특정 문자를 나타내는 바이트 시퀀스를 말하고 있습니다. 유니 유형 (주요 차이점 NCHAR
, NVARCHAR
, XML
및 중단 / 악 NTEXT
)과 유니 코드 유형 ( CHAR
, VARCHAR
및 중단 / 악 TEXT
) 무슨 종류의 바이트 시퀀스들은 저장할 수있다.
비 유니 코드 유형은 여러 8 비트 인코딩 중 하나를 저장하는 반면 유니 코드 유형은 단일 16 비트 유니 코드 인코딩 인 UTF-16 Little Endian을 저장합니다. 다른 답변에서 언급했듯이 8 비트 / 비 유니 코드 인코딩으로 저장할 수있는 문자는 데이터 정렬에 의해 결정되는 코드 페이지에 따라 다릅니다. 다른 사람들은 "문자"의 바이트 값이 발견 된 코드 페이지마다 다를 수 있다고 언급했지만 바이트 값은 여러 EBCDIC 코드 페이지 중 하나를 처리 할 때 동일한 코드 페이지 내에서도 달라질 수 있습니다 (Windows- 이전 버전에서만 발견 된 1252)는 실제로 사용되는 SQL Server 데이터 정렬 (예 : 이름이로 시작하는 SQL Server 데이터 정렬)을 사용해서는 안됩니다 SQL_
.
따라서 정의는 정확합니다. 유니 코드가 아닌 유형으로 저장할 수있는 문자는 항상 8 비트입니다 (두 개의 8 비트 값을 단일 "문자"로 조합하여 사용하는 경우에도 Double- 바이트 문자 세트 / DBCS 코드 페이지에서 허용). 그리고 유니 코드 데이터 유형은 두 개의 16 비트 값을 단일 "문자"(즉, 보조 문자를 나타내는 대리 쌍)로 조합하여 사용하더라도 항상 16 비트입니다.
그리고 SQL Server 가 SQL Server 2019부터 UTF-8 인코딩 VARCHAR
및 CHAR
데이터 유형을 기본적으로 지원하기 때문에
VARCHAR
더 이상 "비 유니 코드"라고 할 수 없습니다. 따라서 2018 년 9 월 SQL Server 2019의 첫 번째 공개 베타부터 SQL Server 2019 VARCHAR
이전 버전으로 말할 때도 "8 비트 데이터 유형"이라고합니다.이 용어는 4 가지 유형 모두에 해당됩니다. 함께 사용할 수있는 인코딩 VARCHAR
:
- 확장 ASCII
- 더블 바이트 문자 집합 (DBCS)
- EBCDIC
- UTF-8 (유니 코드)
TEXT
SQL Server 2005에서 더 이상 사용되지 않으므로 사용하지 않는 데이터 형식 만 "비 유니 코드"이지만 기술 일 뿐이므로 "8 비트 데이터 형식"이라고하는 것이 정확합니다.
NVARCHAR
, NCHAR
및 NTEXT
"UTF-16"또는 "16 비트 데이터 형식"으로 지칭 될 수있다. 오라클은에 대해 "유니 코드 전용"이라는 용어를 사용 NVARCHAR
하지만 UTF-8 (유니 코드 인코딩)을 사용할 가능성을 분명히 배제하지는 않습니다. 처음 두 옵션.
새로운 UTF-8 인코딩에 대한 자세한 내용은 다음 게시물을 참조하십시오.
SQL Server 2019의 기본 UTF-8 지원 : 구주 또는 거짓 예언자?
추신 : 나는 이러한 변화를 반영하기 위해 SQL Server 설명서를 업데이트하면서 천천히 노력하고 있습니다.
PPS Microsoft는 문제에서 참조 된 char 및 varchar 설명서를 포함하여 UTF-8 정보로 일부 페이지를 이미 업데이트했습니다 . 더 이상 "비 유니 코드"라는 문구가 포함되어 있지 않습니다. 그러나 그것은 단지 참고 일뿐입니다. 이것은 유니 코드 전용으로 잘못 간주 된 문자가 포함 된 비 유니 코드 인코딩에 관한 것이므로 질문을 변경하지 않습니다.