2014-12-27 4 views
1

예를 들어, PHP에서 길이를 변경 한 코드를 alter table change column으로 설정하고 새로운 길이를 설정하면 가장 긴 항목에 10000 개의 레코드가있는 경우이 영향이 크게 발생합니까?mysql에서 varchar의 길이를 변경하면 어떤 영향이 있습니까?

이전 데이터가 더 짧지 만 MySQL이 새 크기의 각 레코드에 대해 메모리 공간을 재 할당합니까?

이 문제는 MySQL의 특정

이 포함 된 VARCHAR 컬럼의 길이는 테이블을 만들 때 선언 길이에 고정되어
+0

아니요. 'varchar()'는 가변 길이 문자열 형식입니다. 길이 바이트가 1에서 2 바이트로 변경되는 경우를 제외하고는 형식을 변경할 필요가 없습니다. 'char()'을 사용했다면 데이터가 실제로 변경 될 것입니다. –

+0

의미 ?? ... 포맷이 저장되는 방식을 이해하지 못했습니다. 2 바이트가 필요하지 않으면 크기가 작더라도 항상 1로 저장됩니다. 그러나 최대 길이가 1 바이트에서 2 바이트로 변경되면 이전 데이터에 어떤 일이 발생할지 재 할당되고 따라서 뚱뚱한 데이터베이스에 큰 영향을 미칩니 까? – zardilior

+0

나는 Golez Trol이 맞을지도 모른다고 생각한다 – zardilior

답변

2

. 길이는 0에서 255 사이의 값 (MySQL 5.0.3 이전)과 0에서 65,535 사이의 값이 될 수 있습니다 (MySQL 5.0.3 이상).

varchar의 저장소는 문자열의 길이를 선언하기 위해 1 바이트 또는 2 바이트가 추가 된 데이터 바이트입니다. 최대 길이가 255 이하이면 길이의 1 바이트 만 추가됩니다.

alter table을 사용하고 최대 길이를 변경하면 정의 된 최대 길이가 255 미만인 경우 데이터 저장 크기가 영향을받지 않습니다. 255보다 큰 최대 길이를 늘리면 저장 엔진에 따라 달라집니다 255 이하의 값에 대해 2 바이트를 강제하거나 그렇지 않으면이 경우 각 행에 대해 1 바이트 씩 증가합니다.

char 유형은 char가 항상 필요한 공간을 사용하므로 varchar와 다르므로 char (10) 및 varchar (10)가 있지만 "hello"만 저장되어 있으면 char는 모두 10 바이트를 사용하고 vharchar는 6 바이트 (hello의 경우 5 개, 길이의 경우 1 개)를 보유하므로 varchar 열의 크기를 변경하면 char 유형 인 것처럼 더 많은 저장 공간을 할당하지 않습니다.

진짜 질문은 왜 PHP가 varchar 크기를 조작하게하려는 것입니까? 텍스트 길이가 65,535 바이트 이상인 가변 길이 필드가 필요하고 동적 인 경우에도 필요한 최소한의 공간 만 사용하기 때문에 이유에 따라 크기를 지정해야합니다. TEXT 유형이 상황에 더 나을 수도 있습니다. ?

+0

고마워요. 많은 프로그래머가 mysql을 직접 조작 할 수있는 인터페이스를 사용하기 쉽도록 디자인하고 있습니다. varchar의 길이를 결정할 수있게하면, 예를 들어서는 안되는 일을하게 될 것입니다. 아마 20 o를 사용해야합니다. 이메일을 저장하는 길이를 30으로 설정 한 다음이 앱이나 다른 종류의 메일을 보내려고 시도한 후 줄 서서 놀라게됩니다. – zardilior

관련 문제