programing

열 데이터 유형의 바이트와 CHAR의 차이

cafebook 2023. 2. 27. 22:21
반응형

열 데이터 유형의 바이트와 CHAR의 차이

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
)

데이터베이스 문자 세트가 UTF-8이라고 가정합니다.이것은 Oracle의 최신 버전에서 권장되는 설정입니다.이 경우 데이터베이스에 저장하는 데 1바이트가 넘는 문자가 있습니다.

필드를 다음과 같이 정의하면VARCHAR2(11 BYTE)Oracle은 최대 11바이트를 저장에 사용할 수 있지만, 일부 저장에는 1바이트가 넘는 영어 이외의 문자가 필요하기 때문에 실제로 필드에 11자를 저장할 수 없을 수 있습니다.

필드를 다음과 같이 정의합니다.VARCHAR2(11 CHAR)Oracle에는 11개의 문자를 저장하는 데 필요한 바이트 수에 관계없이 충분한 공간을 사용할 수 있다고 합니다.1 문자는 최대 4 바이트가 필요할 수 있습니다.

하나는 정확히 11바이트를 위한 공간이 있고 다른 하나는 정확히 11자를 위한 공간이 있습니다.Unicode 배리언트등의 일부의 문자 세트에서는, 1 문자당 1 바이트를 넘는 값이 사용되는 일이 있습니다.따라서, 부호화에 따라서는, 11 바이트 필드의 빈 용량이 11 문자 미만인 경우가 있습니다.

http://www.joelonsoftware.com/articles/Unicode.html 도 참조해 주세요.

시스템 설정에 따라 바이트 단위로 메쉬되는 CHAR 사이즈가 다를 수 있습니다.이 예에서는 다음과 같습니다.

  1. 필드를 11바이트로 제한
  2. 필드를 11자로 제한합니다.


Conclusion: 1 CHAR is not equal to 1 BYTE.

Oracle 사용자가 아니기 때문에 잘 모르겠습니다만, Unicode(UTF-16/32)등의 멀티 바이트 문자 세트를 사용하는 경우는 차이가 있다고 생각합니다.이 경우 11바이트는 11자 미만일 수 있습니다.

또한 이러한 필드 유형은 악센트 문자 또는 대소문자에 따라 다르게 취급될 수 있습니다. 예를 들어, 'binaryField(ete) = "été"는 일치하지 않지만 'charField(ete) = "été"는 일치하지 않을 수 있습니다(Oracle에 대해서는 확실하지 않음).

글을 쓸 때 쉬운 말로NAME VARCHAR2(11 BYTE)이 변수에는 11바이트만 수용할 수 있습니다.

예를 들어 Unicode(UTF-16)를 사용하는 경우 사용하는 문자 세트에 관계없이 이름 크기의 절반만 사용할 수 있습니다.NAME.

한편, 만약 당신이 글을 쓴다면NAME VARCHAR2(11 CHAR)그리고나서NAME는, 문자 인코딩에 관계없이, 11 CHAR 에 대응할 수 있습니다.

BYTE를 지정하지 않으면 디폴트가 됩니다.BYTE또는CHAR

그래서 당신이 글을 쓴다면NAME VARCHAR2(4000 BYTE)Unicode(UTF-16) 문자 인코딩을 사용하면 2000자만 사용할 수 있습니다.NAME

, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ,BYTES문자 인코딩에 따라 해당 가상 파일에 몇 개의 문자를 수용할 수 있는지 여부가 결정됩니다.

언급URL : https://stackoverflow.com/questions/81448/difference-between-byte-and-char-in-column-datatypes

반응형