2012-01-18 2 views
0

데이터 유형이 MySQL varchar 인 것에 대해 의문의 여지가 있습니다. 우리 모두 알고 있습니다.MySQL varchar와 IBM DB2 varchar dataype 비교

char은 고정 길이 데이터 유형입니다. 따라서 char 값의 저장 크기는 열의 최대 크기 인 과 같습니다. 그러나 "varchar"의 경우 가변 길이 데이터 형식 인 이므로 varchar 값의 저장 크기는이 열의 최대 크기가 아니라 입력 한 데이터의 실제 길이입니다. 그래서 varchar은 일반적으로 문자/텍스트 종류의 데이터를 저장하고 나중에 사용하기 위해 사용되지 않은 메모리를 보존해야 할 때 더 많이 사용됩니다.

최근에 필자는 IBM DB2의 경우 테이블의 나머지 열의 중간에서 varchar 열을 사용하면 그 특정 열의 문자의 저장 크기가 orignal varchar 열의 크기

EX :

  1. firstName을 : 숯 (50)
  2. 이 lastName : VARCHAR (50)
  3. EMAILID : 숯 (50)
가 3 열이 같은 테이블의 경우,

이제이 텍스트 ('Majhi')를 데이터 형식 varchar(50)의 coloumn "lastName"에 저장하려는 경우 실제 크기 인 5ch 만 사용하는 대신 전체 50char 저장 공간을 사용합니다. 텍스트 ('Majhi').

그렇기 때문에 IBM DB2는 테이블의 나머지 coloumns 중간에 varchar 데이터 유형 coloumn을 포함하여 char 데이터 유형과 동일하게 작동합니다. 따라서 메모리 최적화는 발생하지 않습니다.

그래서 우리가 알고 싶은 것은 우리의 MySQL이 똑같은 방식으로 작동하는지 아니면 varchar 데이터 형식 coloumn이 존재하는지에 따라 다르다는 것입니다. 따라서 varchar 데이터 유형 열이 작동해야합니다.

+1

DB2가 'Mahji'를 varchar (50)의 50 문자를 사용하여 저장할 때, 행의 중간에 해당 필드가 올바르지 않습니다. 실제 값은 5 바이트, 문자열 길이는 4 바이트가됩니다. C 럼에 널 (NULL) 입력이 가능하면 널 (NULL) 표시기에 1 바이트가 추가됩니다. –

답변

2

여기에는 두 가지 측면이 있습니다.

첫 번째 디스크 저장 공간입니다. 이 경우 각 행마다 필요한만큼의 데이터 만 저장되며 varchar 뒤에 다른 열이 있는지 여부는 중요하지 않습니다.

두 번째 테이블은 메모리에로드 된 테이블입니다. 이 경우 MySQL은 내부적으로 VARCHAR(n)CHAR(m) [1]로 변환합니다. 여기서 m은 지정된 열의 데이터 최대 길이입니다. 따라서 열이 VARCHAR(60)으로 선언되었지만 그 중 가장 긴 문자열의 길이가 10이면 메모리 내 필드의 길이는 10으로 고정됩니다. 따라서 메모리 사용 공간을 최소화하고 데이터 액세스 성능을 극대화 할 수 있습니다 (시작할 때 특정 열을 가져 오는 것이 더 쉽습니다).

[1] : 여기서 간소화의 종류. 실제로는 CHAR 또는 다른 MySQL 데이터 유형이 아닙니다.

+0

추가 고려 사항은 유니 코드입니다.바이트 수는 스토리지 및 디스크의 문자 수보다 클 수 있습니다. – zarchasmpgmr

관련 문제