2010-03-30 5 views
1

VARCHAR (45)와 같이 지정하면 최대 45 자까지 사용할 수 있습니다. 나는 몇 년 전에 누군가에게서 괄호 안의 숫자가 문자의 수를 언급하지 않는다는 것을 들었던 것을 기억한다. 그 사람은 내가 이해하지 못하고 이미 잊어 버린 복잡한 것을 나에게 설명하려고 노력했다.데이터베이스 데이터 유형 크기

CHAR과 VARCHAR의 차이점은 무엇입니까? 나는 조금 주위를 검색해 보았고 CHAR이 열 크기의 최대 값을 제공한다는 것을 알았고 데이터가 고정 크기이고 데이터 크기가 가변적 인 경우 VARCHAR을 사용하는 경우이를 사용하는 것이 더 좋습니다.

그러나 당신이 칼럼의 모든 데이터의 열의 크기의 최대를 제공하는 경우, 당신의 데이터 크기가 변할 때 그것을 사용하는 것이 더하지? 특히 데이터 크기가 얼마나 커질 지 모르는 경우. VARCHAR은 크기를 지정해야합니다 (CHAR는 실제로 필요하지는 않습니까?), 더 성가 시지 않습니까?

+0

관련 질문 : - http://stackoverflow.com/questions/758699/is-the-char-datatype-in-sql-obsolete-when-do-you-use-it –

답변

1

또한 크기를 CHAR으로 지정해야합니다. CHAR을 사용하면 지정된 값을 채우기 위해 열 값에 공백이 채워지지만 VARCHAR이면 지정한 실제 값만 저장됩니다.

CREATE TABLE test (
    char_value CHAR(10), 
    varchar_value VARCHAR(10) 
); 

INSERT INTO test VALUES ('a', 'b'); 

SELECT * FROM test; 

char_value은 "         "귀하의 모든 값이 같은 크기 인 경우 varchar_value

에 "B"는 CHAR를 선택한다 : 예를 들어

아마도 VARCHAR보다 적은 저장 공간을 필요로하기 때문에 더 나은 선택 일 수 있습니다. 이는 VARCHAR이 값의 길이와 값 자체를 모두 저장하는 반면 CHAR은 (고정 크기) 값을 저장할 수 있기 때문입니다.

+1

어떻게 될 수 있습니까? 말하자면 1 바이트를 varchar (255)에 저장합니다. 그래서, 나는 총 길이로 2 바이트 있습니다. char는 255 바이트를 취합니다. –

+1

네,하지만 varchar (2)와 char (2)가 같을 경우 char (2)는 2 바이트이고 varchar (2)는 3 바이트가됩니다. –

+0

나는이 같은 명확한 예를 좋아한다, 고마워! – yeeen

1

MySQL documentation는 다양한 데이터 유형의 스토리지 요구 사항의 좋은 설명을 제공합니다.

특히 길이가 L 인 문자열의 경우 CHAR(M) 데이터 유형은 (Mxc) 바이트를 사용합니다 (여기서 c는 문자를 저장하는 데 필요한 바이트 수 ... 이것은 사용중인 문자 집합에 따라 다릅니다) . 은 M이 < = 255 또는> 255인지에 따라 (L + 1) 또는 (L + 2)을 차지합니다.

그래서, 정말 길이의 변화가 될 것입니다 무엇을, 당신이 당신의 문자열이있을 것으로 예상 시간에 따라 달라집니다.

NB 다음 documetation는 VARCHAR 유형의 스토리지 요구 사항에 대한 문자 집합의 영향을 설명하지 않습니다. 나는 그것을 정확하게 인용하려고 노력했지만, 내 생각에 문자열 길이에 문자 바이트 너비를 곱하여 기억 장치 요구 사항을 얻으려고합니다.

+0

나는 번식 할 필요가 없다고 생각했다. 그냥 덧붙여 라. – yeeen

+0

당신이 말하는 내용을 잘 모르겠습니다 ... 직접 문서에서 인용 할 수 있습니까? – Dancrumb

0

열에 작은 고정 된 수의 문자가 포함될 것이라는 것을 알고 있으면 CHAR를 사용하고, 그렇지 않으면 varchar를 사용하십시오. CHAR 열에는 최대 길이가 채워집니다.

VARCHAR는 작은 오버 헤드 (4-8 바이트 RDBMS에 따라)이 있지만 오버 헤드 + 저장된 문자의 실제 수를 사용한다. 당신은 그들이 등 전화 번호, 우편 번호에 대한 예를 들어, 일정거야 알고있는 값에 대한

0

, 확실히 "문자"를 사용하는 것이 최적입니다.

0

기억하지 못하는 복잡한 내용은 45가 문자가 아닌 바이트를 참조한다는 것입니다. 멀티 바이트 문자 인코딩을 사용하는 경우에는 동일하지 않습니다. 오라클에서는 바이트 또는 문자를 명시 적으로 지정할 수 있습니다.

varchar2(45 BYTE) 

또는

varchar2(45 CHAR) 

Difference between BYTE and CHAR in column datatypes

+0

예, abt 바이트입니다. 그러나 파라메시의 숫자는 MySQL에서 char로 확인되었습니다 :) – yeeen

+0

Oracle, IIRC에서는 그렇지 않습니다. – Samuel

1

문자를 참조 VARCHAR은 실제로 당신이 VARCHAR 또는 텍스트와 같은 테이블에 단 1 가변 길이 필드가있는 경우 무관된다. MySQL은 자동으로 모든 문자를 varchar로 변경합니다.

고정 길이/크기 레코드는 추가 성능을 제공 할 수 있지만 가변 길이 필드 유형은 사용할 수 없습니다. 그 이유는 mysql이 다음 레코드를 찾는 것이 더 빠르고 쉽다는 것입니다.

예를 들어 SELECT * FROM 테이블 LIMIT 10을 수행하면 mysql이 10 번째 레코드의 테이블 파일을 스캔해야한다. 이것은 10 번째 레코드의 끝을 찾을 때까지 각 레코드의 끝을 찾는 것을 의미합니다. 그러나 테이블에 길이/크기 레코드가 고정되어 있으면 mysql은 레코드 크기를 알아야하고 10 x #bytes를 건너 뛸 수 있습니다.