열 데이터 유형의 바이트와 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 사이즈가 다를 수 있습니다.이 예에서는 다음과 같습니다.
- 필드를 11바이트로 제한
- 필드를 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
'programing' 카테고리의 다른 글
리액트 훅에서 'setState' 콜백을 사용하는 방법 (0) | 2023.02.27 |
---|---|
JSON 개체를 파일에 저장하는 중입니다.JSON (0) | 2023.02.27 |
Angular에서 스코프 변수가 정의되지 않았는지 확인하는 방법JS 템플릿? (0) | 2023.02.27 |
날짜 객체에 대한 대응 프로펠러 검증 (0) | 2023.02.27 |
봄콩은 조건부 콩에 의존합니다. (0) | 2023.02.22 |