MySQL의 Varchar는 길이가 최대일 수 있는 텍스트를 저장하는 데 사용되는 데이터 유형입니다. 65535자 . 테이블의 varchar 열은 다음과 같습니다. 가변 길이 문자열 숫자나 문자 또는 둘 다를 포함할 수 있습니다. 이 데이터 유형은 버전 5.0.3 이전에는 255자만 저장할 수 있었지만 이 버전 이상에서는 최대 65535자를 저장할 수 있습니다. MySQL에 다음과 같이 저장할 수 있습니다. 1바이트 또는 2바이트 길이 접두어에 실제 크기를 더한 값입니다.
길이 접두사는 우리가 설정한 최대 크기가 아니라 문자열 값의 바이트 길이를 지정합니다. 값에 255바이트 이상이 필요하지 않은 경우 열은 길이 접두사에 1바이트를 더한 값을 사용합니다. 값에 255바이트 이상이 필요한 경우 열은 길이 접두사에 2바이트를 더한 값을 사용합니다.
VARCHAR의 최대 길이 MySQL TEXT/BLOB 열과 사용된 문자 집합을 제외한 모든 열에서 공유되는 최대 행 크기 65,535바이트가 적용됩니다. 이는 총 열이 65535바이트를 초과할 수 없음을 의미합니다.
예를 들어 이해해 봅시다.
자바 문자열 조인
두 개의 테이블을 만들고 이름을 Test1과 Test2로 지정하겠습니다. 두 테이블 모두 T1과 T2라는 두 개의 열을 포함합니다. 다음 명령문을 실행하여 ' 테이블을 생성합니다. 테스트 1 ':
자바 불변 목록
CREATE TABLE Test1 ( T1 VARCHAR(32765) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
열 길이 T1 = 32765 + 2바이트이고 T2 = 32766 + 2바이트가 65535(32765+2+32766+2)이기 때문에 위 명령문은 테이블을 성공적으로 생성했습니다. 따라서 열 길이는 varchar의 최대 행 크기인 65535를 만족합니다.
이제 열 크기가 변경되면 어떻게 되는지 살펴보겠습니다. 초과하다 varchar의 최대 크기는 65535입니다. T1 열의 크기를 늘려 테이블을 생성하는 아래 명령문을 실행합니다. 테스트2 :
CREATE TABLE Test2 ( T1 VARCHAR(32770) NOT NULL, T2 VARCHAR(32766) NOT NULL ) CHARACTER SET = 'latin1' COLLATE LATIN1_DANISH_CI;
위 명령문을 실행한 후 MySQL에서 오류가 발생합니다. 이는 최대 행 크기가 65,535바이트를 초과할 수 없음을 의미합니다. 어쨌든 증가하면 명령문이 실패하고 MySQL은 오류를 생성합니다.
또 다른 경우에는 다음과 같은 테이블을 생성했다고 가정합니다. 테스트3 아래 명령문을 사용하여:
Java에서 예외 처리 던지기
CREATE TABLE Test3 ( Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(5) NOT NULL );
그런 다음 아래 명령문을 사용하여 테이블에 값을 삽입하십시오.
INSERT INTO Test3(Name) VALUES ('Stephen');
이제 위의 명령문을 실행해 보세요. MySQL은 다음과 같은 오류 메시지를 표시합니다. 행 1의 '이름' 열에 대한 데이터가 너무 깁니다. . 출력에서는 이를 더 명확하게 설명합니다.
MySQL VARCHAR 및 공백
MySQL은 varchar 값이 저장될 때 공간을 채우지 않습니다. MySQL은 또한 varchar 값을 저장하거나 검색할 때 후행 공백을 유지했습니다. 다음 예를 통해 이를 이해할 수 있습니다. 문 삽입 에 값을 추가합니다. 이름 테이블의 열 테스트3 :
INSERT INTO Test3(Name) VALUES ('John ');
그런 다음 SELECT 문을 실행하여 값을 검색합니다.
SELECT Id, Name, length(Name) FROM Test3;
MySQL은 열 길이를 늘리지 않기 때문에 길이 계산에 후행 공백을 포함시킨 다음 출력을 제공합니다.
그러나 열 길이를 초과하는 후행 공백이 있는 varchar 값을 삽입하려고 하면 MySQL은 잘리다 후행 공백. 또한 MySQL은 경고 . 다음 예에서는 이를 더 명확하게 설명합니다.
리눅스 어떤 명령
INSERT INTO Test3(Name) VALUES ('Peter ');
위의 명령문은 길이가 다음과 같은 값을 삽입합니다. 육 이름 열에. 값은 여전히 열에 삽입되지만 MySQL은 값을 추가하기 전에 후행 공백을 자릅니다. 아래 쿼리를 사용하면 insert 문이 성공적으로 추가되었지만 다음과 같은 경고가 표시되는 것을 확인할 수 있습니다. 행 1의 'name' 열에 대한 데이터가 잘렸습니다. :
Char와 Varchar 데이터 유형의 차이점
char 및 varchar 데이터 유형은 모두 다음과 같습니다. ASCII 문자 . 거의 동일하지만 데이터베이스에서 데이터를 저장하고 검색하는 방식이 다릅니다. 다음 표에는 char 및 varchar 데이터 유형 간의 주요 차이점이 요약되어 있습니다.
숯 | VARCHAR |
---|---|
그것은 성격을 나타냅니다. | 가변적인 성격을 의미합니다. |
테이블을 생성할 때 선언한 값을 고정 길이로 저장합니다. | 1바이트 또는 2바이트 길이 접두사가 있는 가변 길이 문자열에 값을 저장합니다. |
이 데이터 유형은 지정된 길이를 유지하기 위해 후행 공백으로 채워질 수 있습니다. | 이 데이터 유형은 저장 시 공백을 포함한 어떤 문자로도 채워질 수 없습니다. |
255자를 초과할 수 없습니다. | 최대 65535자를 수용할 수 있습니다. |
정적 메모리 할당을 지원합니다. | 동적 메모리 할당을 지원합니다. |