열 데이터 유형에서 BYTE와 CHAR의 차이점


166

Oracle에서는 다음과 같은 차이점이 있습니다.

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 BYTE),
 ID_CLIENT NUMBER
)

CREATE TABLE CLIENT
(
 NAME VARCHAR2(11 CHAR), -- or even VARCHAR2(11)
 ID_CLIENT NUMBER
)

답변:


265

데이터베이스 문자 세트가 UTF-8이라고 가정 해 봅시다. 이것은 최신 버전의 Oracle에서 권장되는 설정입니다. 이 경우 일부 문자는 데이터베이스에 저장하는 데 1 바이트 이상이 걸립니다.

필드를으로 정의하면 VARCHAR2(11 BYTE)Oracle은 스토리지에 최대 11 바이트를 사용할 수 있지만 실제로는 11 자 이상의 문자를 저장할 수 없습니다. 일부 문자는 영어 이외의 문자와 같이 1 바이트 이상을 저장하기 때문입니다.

VARCHAR2(11 CHAR)Oracle에 말한 대로 필드를 정의하면 각 바이트를 저장하는 데 걸리는 바이트 수에 관계없이 11자를 저장할 수있는 충분한 공간을 사용할 수 있습니다. 단일 문자는 최대 4 바이트를 요구할 수 있습니다.


55
문자 길이 의미론은의 최대 4000 바이트 길이에 영향을 미치지 않습니다 VARCHAR2. VARCHAR2(4000 CHAR)일부 문자에 여러 바이트의 스토리지가 필요한 경우 a 를 선언하면 4000 자 미만이 허용됩니다.
저스틴 동굴

@David Sykes 의미 적으로 NVARCHAR (11)과 동일합니까?
Nap

@Nap 내가 아는 한. NVARCHAR 유형 선언의 크기 매개 변수는 VARCHAR2와 같은 의미를 가지고 있다고 생각합니다. 즉, NVARCHAR 문자 세트에서 11 자 (바이트가 아님)에 충분한 저장 공간을 확보하려면 NVARCHAR (11 CHAR)이라고합니다. 참고 : 실제로 이것을 확인하지 않았습니다. 나는 NVARCHAR을 사용한 적이 없다.
David Sykes

두 가지의 차이점을 더 설명하기 위해 : 16 진수로 인코딩 된 값 (예 : "0xFF")의 4 개 문자 또는 3 개의 10 진수 문자 (예 : "255")는 단일 바이트로 표시 될 때 "압축"될 수 있습니다. 11111111 비트 플래그 (최대 8 개 설정), 비트 단위 연산 등에 유용합니다.
Matt Borja

ASCII 문자 (1 월 49 일)는 1은 1001001이지만 비트는 1은 00000001입니다.
Matt Borja


17

시스템 구성에 따라 BYTES로 측정 된 CHAR 크기는 다를 수 있습니다. 귀하의 예에서 :

  1. 필드를 11 바이트로 제한
  2. 필드를 11 명의 CHAR 행위자로 제한


결론 : 1 CHAR은 1 BYTE와 같지 않습니다.


4

Oracle 사용자가 아니기 때문에 확실하지 않지만 유니 코드 (UTF-16 / 32)와 같은 멀티 바이트 문자 세트를 사용할 때 차이점이 있다고 가정합니다. 이 경우 11 바이트는 11 자 미만을 차지할 수 있습니다.

또한 해당 필드 유형은 악센트 부호 문자 나 대소 문자와 관련하여 다르게 취급 될 수 있습니다. 예를 들어 'binaryField (ete) = "été"'는 일치하지 않지만 'charField (ete) = "été"'는 (Oracle에 대해 확실하지 않음) .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.