11.4.3 BLOB 형태와 TEXT 형태
BLOB
는 다양한 용량의 데이터를 저장할 수있는 큰 이진 개체입니다. BLOB
형은 TINYBLOB
, BLOB
, MEDIUMBLOB
와 LONGBLOB
의 4 가지가 있습니다. 이러한 차이는 유지할 수있는 값의 최대 길이뿐입니다. TEXT
형은 TINYTEXT
, TEXT
, MEDIUMTEXT
, 그리고 LONGTEXT
의 4 가지가 있습니다. 이들은 4 개의 BLOB
형태에 대응하고 최대 길이 및 스토리지 요구 사항은 동일합니다. 섹션 11.7 "데이터 타입 스토리지 요구 사항" 을 참조하십시오.
BLOB
값은 바이너리 스트링 (바이트 문자열)로 처리됩니다. 여기에는 문자 세트가없고, 정렬 및 비교는 컬럼 값의 바이트의 수치에 근거합니다. TEXT
값은 비 이진 문자열 (문자열)로 처리됩니다. 여기에는 문자 집합이 값은 문자 집합의 정렬 순서에 따라 정렬 및 비교됩니다.
엄격한 SQL 모드가 유효하지 않은 경우에, BLOB
또는 TEXT
컬럼에 최대 길이를 초과하는 값을 지정하면 그 값은 컬럼의 최대 길이에 맞게 절단되고 경고 메시지가 표시됩니다. 공백이 아닌 문자의 절단에 대해서는 엄격한 SQL 모드를 사용하면 경고가 아닌 오류를 발생시키고, 그 값의 삽입을 억제 할 수 있습니다. 섹션 5.1.7 "서버 SQL 모드" 를 참조하십시오.
TEXT
컬럼에 삽입되는 값에서 초과 된 후행 공백을 절단함으로써 SQL 모드에 관계없이 항상 경고가 생성됩니다.
TEXT
및 BLOB
컬럼은 삽입시에 패딩되지 않고 선택시 바이트는 제거되지 않습니다.
TEXT
컬럼에 인덱스가 설정되어 있으면 인덱스 항목의 비교는 끝이 공간에 채워집니다. 이것은 인덱스 고유 값이 필요한 경우 후행 공백의 개수 만 다른 값에 중복 키 에러가 발생한다는 것을 의미합니다. 예를 들어, 테이블에 'a'
가 포함되어있는 경우 'a '
를 저장하려고하면 중복 키 오류가 발생합니다. 이것은 BLOB
컬럼에는 적용되지 않습니다.
대부분의 점에서 BLOB
컬럼을 원하는 길이로 설정할 수있는 VARBINARY
컬럼으로 간주 할 수 있습니다. 마찬가지로, TEXT
컬럼을 VARCHAR
컬럼으로 간주 할 수 있습니다. BLOB
과 TEXT
는 다음 사항에 VARBINARY
및 VARCHAR
과 다릅니다.
BLOB
와TEXT
컬럼의 인덱스는 인덱스 프리픽스 길이를 지정해야합니다.CHAR
와VARCHAR
는 프리픽스 길이는 옵션입니다. 섹션 8.3.4 "컬럼 인덱스" 를 참조하십시오.BLOB
및TEXT
컬럼에DEFAULT
값을 포함 할 수 없습니다.
BINARY
속성을 TEXT
데이터 타입과 함께 사용하면 열 문자 집합의 이진 데이터 정렬이 컬럼에 할당됩니다.
LONG
및 LONG VARCHAR
는 MEDIUMTEXT
데이터 형에 맵합니다. 이것은 호환 기능입니다.
MySQL Connector / ODBC는 BLOB
값을 LONGVARBINARY
으로 TEXT
값을 LONGVARCHAR
로 정의합니다.
BLOB
값과 TEXT
값은 매우 길어질 수 있으므로 사용할 때 다음의 제약이 발생할 수 있습니다.
정렬시에는 컬럼의
max_sort_length
바이트 만 사용됩니다.max_sort_length
의 기본값은 1024입니다. 서버 시작시 또는 실행시에max_sort_length
의 값을 증가시킴으로써 정렬 또는 그룹화에 영향을주는 바이트를 늘릴 수 있습니다. 모든 클라이언트에서max_sort_length
세션 변수의 값을 변경할 수 있습니다.mysql>
SET max_sort_length = 2000;
mysql>SELECT id, comment FROM t
->ORDER BY comment;
임시 테이블을 사용하여 처리되는 쿼리의 결과에
BLOB
컬럼 또는TEXT
컬럼의 인스턴스가 있으면MEMORY
스토리지 엔진이 이러한 데이터 형식을 지원하지 않기 때문에 서버는 메모리가 아닌 디스크에서 테이블을 사용합니다 ( 섹션 8.4.4 "MySQL이 내부 임시 테이블을 사용하는 방법" 을 참조하십시오). 디스크의 사용은 성능 저하를 수반하므로 쿼리 결과에BLOB
컬럼 또는TEXT
컬럼을 포함하는 것은 필요한 경우에 한정합니다. 예를 들어,SELECT *
는 모든 컬럼을 선택하기 때문에 사용하지 마십시오.BLOB
또는TEXT
오브젝트의 최대 크기는 그 형태에 따라 결정됩니다 만, 클라이언트와 서버간에 실제로 송신 할 수있는 최대치는 사용 가능한 메모리 용량과 통신 버퍼의 크기에 따라 결정됩니다.max_allowed_packet
변수의 값을 변경하여 메시지 버퍼 크기를 변경할 수 있지만, 서버와 클라이언트 프로그램에서 모두 변경해야합니다. 예를 들어, mysql 및 mysqldump 중 어느 것을 사용하여도 클라이언트 측의max_allowed_packet
값을 변경할 수 있습니다. 섹션 8.11.2 "서버 파라미터의 튜닝」 , 섹션 4.5.1 "mysql - MySQL 명령 행 도구" , 섹션 4.5.4 "mysqldump - 데이터베이스 백업 프로그램" 을 참조하십시오. 패킷 크기 및 정렬 데이터 객체의 크기를 스토리지 요구 사항과 비교 할 수 있습니다. 섹션 11.7 "데이터 타입 스토리지 요구 사항" 을 참조하십시오.
BLOB
값 또는 TEXT
값은 각각 개별적으로 할당 된 객체에 의해 내부적으로 표현됩니다. 이것은 테이블이 열릴 때 열마다 한 번 스토리지가 할당 된 다른 모든 데이터 유형과 대조적입니다.
미디어 파일 등의 바이너리 데이터를 BLOB
또는 TEXT
컬럼에 저장하는 것이 좋은 경우도 있습니다. 이러한 데이터의 처리는 MySQL의 문자열 조작 함수가 도움이 될 수 있습니다. 섹션 12.5 "문자열 함수" 를 참조하십시오. 보안 등의 이유로 일반적으로 응용 프로그램 사용자에 FILE
권한을주는 것이 아니라 응용 프로그램 코드를 사용하여 실행하는 것이 좋습니다. MySQL 포럼 ( http://forums.mysql.com/ )는 다양한 언어와 플랫폼에 대한 자세한 내용 토론 할 수 있습니다.