>  기사  >  데이터 베이스  >  MySQL에서 char 및 varchar 데이터 유형을 선택하는 원칙

MySQL에서 char 및 varchar 데이터 유형을 선택하는 원칙

黄舟
黄舟원래의
2017-03-01 13:34:291586검색


char 및 varchar 데이터 유형 선택 원칙을 분석할 때 스토리지 엔진을 무시하는 경우가 많습니다. 실제로 선택한 스토리지 엔진에 따라 적절한 데이터 유형을 선택하는 방법을 결정해야 합니다.

char와 varchar 비교

char(3) 实际存储字符长度 varchar(3) 实际存储字符长度
’   ‘ 3 1
‘ab’ ‘ab ‘ 3 ‘ab’ 3
‘abc’ ‘abc’ 3 ‘abc’ 4
‘abcdefg’ ‘abc’ 3 ‘abc’ 4

요약: 위 표에서 볼 수 있듯이 char은 길이가 고정되어 있습니다.
Char는 고정 길이 유형이고, varchar는 고정 길이가 아닌 유형이며, varchar는 가변 길이 유형입니다. 누군가가 varchar의 길이가 데이터 길이보다 큰 이유를 물을 수 있습니까? VARCHAR은 1바이트 또는 2바이트 길이의 접두사 + 데이터로 저장되기 때문입니다. VARCHAR 열의 선언된 길이가 255보다 큰 경우 길이 접두사는 2바이트이고, 그렇지 않으면 1바이트입니다.

MyISAM 스토리지 엔진

MyISAM 데이터 테이블에서는 가변 길이 데이터 열 대신 고정 길이 데이터 열을 사용하는 것이 가장 좋습니다.

InnoDB 스토리지 엔진

VARCHAR 타입 사용을 권장합니다.
InnoDB 데이터 테이블의 경우 내부 행 저장 형식은 고정 길이 열과 가변 길이 열을 구분하지 않습니다(모든 데이터 행은 데이터 열 값을 가리키는 헤드 포인터를 사용함). 따라서 본질적으로 고정 길이 CHAR 열을 사용하는 것은 가변 길이 VARCHAR 열을 사용하는 것보다 반드시 더 간단하지는 않습니다. 따라서 주요 성능 요소는 데이터 행에서 사용하는 총 스토리지 양입니다. CHAR는 VARCHAR보다 평균적으로 더 많은 공간을 차지하므로 처리해야 하는 데이터 행의 전체 저장 공간과 디스크 I/O를 최소화하려면 VARCHAR을 사용하는 것이 좋습니다.

MEMORY 스토리지 엔진

MEMORY 데이터 테이블은 현재 고정 길이 데이터 행 스토리지를 사용하므로 CHAR 또는 VARCHAR 열을 사용하는지 여부는 중요하지 않습니다. 둘 다 CHAR 유형으로 처리됩니다.

오해

1. utf-8 중국어는 3바이트를 차지하고 gbk는 2바이트를 차지한다는 사실을 모두가 알고 있으므로 varchar(20)에는 한자 6자만 저장할 수 있나요?
답변: 그렇지 않습니다(온라인에서는 5.0 이전 버전도 이랬다고 하는데 테스트는 없습니다). mysql varchar(20)은 중국어와 영어 모두 20을 저장할 수 있지만 varchar 필드의 최대 길이는 인코딩에 따라 다릅니다. utf-8이면 약 65535/3이고, gbk이면 약 65535/3입니다. 약 65535/2

char 및 varchar 데이터 유형 선택 원칙을 분석할 때 스토리지 엔진을 무시하는 경우가 많습니다. 실제로 선택한 스토리지 엔진에 따라 적절한 데이터 유형을 선택하는 방법을 결정해야 합니다.

위 내용은 MySQL의 char 및 varchar 데이터 유형 선택 원칙에 대한 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.