문제

가능한 복제 :
모든 텍스트 기반 필드에 일반 Varchar (255)를 사용하는 데 단점이 있습니까?

MySQL에서 Varchar 필드 유형의 길이를 선택할 수 있습니다. 가능한 값은 1-255입니다.

그러나 Varchar (20) 대신 최대 값인 Varchar (255)를 사용한다면 장점은 무엇입니까? 내가 아는 한, 항목의 크기는 삽입 된 문자열의 실제 길이에만 의존합니다.

크기 (바이트) = 길이+1입니다

따라서 Varchar (255) 필드에 "예제"라는 단어가 있다면 8 바이트가 있습니다. Varchar (20) 필드에있는 경우 8 바이트도 있습니다. 차이점은 무엇입니까?

나는 당신이 나를 도울 수 있기를 바랍니다. 미리 감사드립니다!

도움이 되었습니까?

해결책

체크 아웃 : Varchar에 대한 참조

요컨대, Varchar에서 255의 크기를 넘어서지 않으면 길이 접두사에 대해 다른 바이트가 필요하지 않으면 큰 차이가 없습니다.

길이는 다른 무엇보다 열에 저장된 데이터에 더 많은 제약 조건을 나타냅니다. 이는 본질적으로 열의 최대 저장 크기를 제한합니다. IMHO, 길이는 데이터와 관련하여 의미가 있어야합니다. 사회 보장 #을 저장하는 경우 실제로 저장하는 것이 SSN이라면 저장 비용이 들지 않더라도 길이를 128로 설정하는 것이 합리적이지 않습니다.

다른 팁

성능과 관련이없는 최대 값보다 작은 값을 선택하는 데 많은 유효한 이유가 있습니다. 크기를 설정하면 저장중인 데이터 유형을 나타내며 최후의 유효성 검증 형태 역할을 할 수 있습니다.

예를 들어, 영국 우편 번호를 저장하는 경우 8 자만 필요합니다. 이 한도를 설정하면 저장하는 데이터 유형을 명확하게하는 데 도움이됩니다. 255자를 선택했다면 문제가 혼란 스러울 것입니다.

MySQL에 대해 잘 모르지만 SQL Server에서는 필드를 정의하여 사용 된 총 바이트 수가 실제로 레코드에 저장 될 수있는 총 바이트 수보다 클 수 있습니다. 이것은 나쁜 것입니다. 조만간 한도에 도달하는 행이 표시되고 데이터를 삽입 할 수 없습니다.

행 크기 제한을 고려하기 위해 데이터베이스 구조를 설계하는 것이 훨씬 좋습니다.

또한 예, 사람들이 최대 값이 10 인 필드에 200자를 넣는 것을 원하지 않습니다. 그렇게하면 거의 항상 나쁜 데이터입니다.

당신은 말하지만, 나는 그것을 신청 수준에서 제한 할 수 있다고 말합니다. 그러나 데이터는 하나의 응용 프로그램에서만 데이터베이스에 들어 가지 않습니다. 때때로 여러 응용 프로그램이 사용하고 때로는 데이터가 가져오고 때로는 쿼리 창에서 수동으로 수정됩니다 (예 : 가격에 10%를 추가하도록 모든 레코드를 업데이트). 이러한 다른 데이터 소스 중 하나라도 응용 프로그램에 넣은 규칙에 대해 알지 못하면 데이터베이스에 쓸모없는 데이터가 나빠질 것입니다. 데이터 무결성은 데이터베이스 수준에서 시행되어야합니다 (데이터를 입력하기 전에 확인하는 것도 멈추지 않음) 또는 무결성이 없습니다. 또한 데이터베이스를 디자인하기에는 너무 게으른 사람들이 너무 게으른 사람들도 실제로 애플리케이션에 제한을두기에는 너무 게으르고 데이터 무결성 검사가 전혀 없습니다.

그들은 데이터 무결성이없는 데이터베이스에 대한 단어가 있습니다.

의미 적 차이가 있습니다 (그리고 이것이 유일한 차이라고 생각합니다) : 30 개의 비 공간 문자를 Varchar (20)로 채우려고하면 오류가 발생하는 반면 Varchar (255)의 경우 성공할 수 있습니다. 따라서 주로 추가적인 제약입니다.

더 큰 항목을 허용하거나 항목 크기를 제한하고 싶다면.

예를 들어, 당신은 varchar 20으로 First_name을 가질 수 있지만, 아마도 20 개가 varchar 50으로서 street_address는 충분한 공간이 아닐 수 있습니다. 동시에, 당신은 그 값이 얼마나 큰지 제어 할 수 있습니다.

다시 말해, 이론적으로 테이블 (그리고 잠재적으로 인덱스/인덱스 항목)이 너무 커지는 것을 방지하기 위해 특정 값이 얼마나 큰지에 대한 천장을 설정했습니다.

고정 너비 인 Char를 사용할 수는 있지만 더 작을 수있는 Varchar와 달리 char는 값을 패드합니다 (이로 인해 SQL 액세스가 더 빠릅니다.

데이터베이스 관점에서 성능 현명하게 차이가있을 것이라고 생각하지 않습니다.

그러나 사용하는 길이에 대한 많은 결정은 필요한 데이터 만 수용하기 위해 시스템을 달성하고 문서화하려는 것에 달려 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top