복붙노트

[SQL] 왜 역사적으로 사람들은 데이터베이스 필드의 크기 255하지 256을 사용합니까?

SQL

왜 역사적으로 사람들은 데이터베이스 필드의 크기 255하지 256을 사용합니까?

당신은 종종 255 자의 크기를 가지도록 설정 데이터베이스 필드를 참조 전통 / 역사 이유는 무엇인가? 나는 항상 저를 혼동하고있다 페이징 / 메모리 제한 및 성능하지만 255과 256 사이의 구별 함께 할 수있는 그것의 무언가를 가정합니다.

varchar(255)

이것은 용량 또는 크기가 고려되는, 인덱서 이유 255 256 이상 바람직하지? 바이트는 어떤 목적 (터미네이터 또는 null 또는 무언가)을 위해 예약되어 있습니까?

아마도 VARCHAR (0)는 넌센스 (제로 용량을 갖는)? 이 경우 공간이 2 ^ 8 (256)은 확실하게해야 하는가?

성능 이점을 제공하는이 다른 크기가 있습니까? 예를 들어 VARCHAR (512) VARCHAR (511) 또는 VARCHAR (510)보다 성능이 좋은입니까?

이 값은 모든 관계 데이터베이스 같은 이전 및 새인가?

내가 필드의 크기와 그 알고있는 내 비즈니스 로직에 맞게 형식을 사용하지만, 나는 더 이상 관련이 경우에도,이 기본 설정에 대한 역사적인 이유를 알지 싶습니다, 개발자가 아닌 DBA 해요 (하지만도 - 면책 조항 여전히) 관련 더 많은 경우.

답변 주셔서 감사합니다, 바이트가 저장 크기로 사용되는 몇 가지 합의가있을 것 같다, 그러나 이것은 내 마음에 확실히 문제를 해결하지 않습니다.

메타 데이터 (문자열 길이)와 동일한 연속 메모리 / 디스크에 저장되어있는 경우, 그 일부를 의미한다. 메타 데이터의 1 바이트와 문자열 데이터의 255 바이트가 매우 좋게 서로 맞 및 아마도 단정하고 깔끔 저장, 256 바이트의 연속에 맞는 것이다.

메타 데이터 (문자열 길이) (아마도 마스터 테이블에서) 실제 문자열 데이터는 별도로 저장되어있는 경우하지만 ... 그때는 단지 1 바이트 정수를 저장하기 쉽게해서, 1 바이트 문자열의 데이터의 길이를 제한하는 메타 데이터의 비트 홀수 보인다.

두 경우 모두, 아마도 DB 구현에 따라 미묘 것으로 보인다. (255)를 사용하는 방법은 누군가 곳이 처음에 대한 좋은 케이스를 주장해야합니다, 그래서 깡통 사람이 그런 경우가 있었는지 / 기억, 꽤 광범위하게 보인다? 프로그래머는 이유없이 새로운 관행을 채택하지 않을 것이다,이 새로운 한 번 이었음에 틀림 없다.

해결법

  1. ==============================

    1.최대 255 자 길이로, DBMS는 필드의 데이터의 길이를 나타내는 단일 바이트를 사용하도록 선택할 수 있습니다. 한도가 256 이상이라면 2 바이트가 필요하다.

    최대 255 자 길이로, DBMS는 필드의 데이터의 길이를 나타내는 단일 바이트를 사용하도록 선택할 수 있습니다. 한도가 256 이상이라면 2 바이트가 필요하다.

    (달리 제한되지 않는 한) 길이 0의 값은 VARCHAR 데이터를 확실하게 유효하다. 대부분의 시스템은 NULL 구별와 같은 빈 문자열을 취급하지만, 일부 시스템 (특히 오라클은) NULL 동일 빈 문자열을 취급합니다. 빈 문자열이 NULL이 아닌 시스템의 경우, 행의 추가 비트 곳은 값이 NULL로 간주 여부를해야하는지 여부를 나타 내기 위해 필요하다.

    당신이 참고로,이 역사적인 최적화이며, 아마도 오늘날 대부분의 시스템에 관련이 없습니다.

  2. ==============================

    2.255를 varchar mySQL4의 한계 및 이전이었다.

    255를 varchar mySQL4의 한계 및 이전이었다.

    또한 문자 255 + 256 = null 종결

    또는 1 바이트 길이 디스크립터는 가능한 범위를 255 개 문자를 준다

  3. ==============================

    3.255 (8 비트 바이트를 가정하면) 단일 바이트의 부호없는 정수로 저장 될 수있는 가장 큰 수치이다 - 그것은 그들이 단지해야한다는 것을 의미하기 때문에, 따라서, 어떤 목적에 대한 문자열의 길이를 저장하는 애플리케이션은 256 이상 255 선호 은 "크기"변수에 1 바이트를 할당.

    255 (8 비트 바이트를 가정하면) 단일 바이트의 부호없는 정수로 저장 될 수있는 가장 큰 수치이다 - 그것은 그들이 단지해야한다는 것을 의미하기 때문에, 따라서, 어떤 목적에 대한 문자열의 길이를 저장하는 애플리케이션은 256 이상 255 선호 은 "크기"변수에 1 바이트를 할당.

  4. ==============================

    4.MySQL의 매뉴얼에서 :

    MySQL의 매뉴얼에서 :

    이해하고 선택을합니다.

  5. ==============================

    5.11111111 = 255 : 255은 8 비트 정수의 최대 값이다.

    11111111 = 255 : 255은 8 비트 정수의 최대 값이다.

  6. ==============================

    6.(255)의 최대 길이는 데이터베이스 엔진은 각 필드의 길이를 저장하기 위해 단지 1 바이트를 사용할 수있다. 당신은 공간의 1 바이트는 문자열의 길이 2 ^ 8 = 256 개 별개의 값을 저장할 수 있다는 정확합니다.

    (255)의 최대 길이는 데이터베이스 엔진은 각 필드의 길이를 저장하기 위해 단지 1 바이트를 사용할 수있다. 당신은 공간의 1 바이트는 문자열의 길이 2 ^ 8 = 256 개 별개의 값을 저장할 수 있다는 정확합니다.

    당신은 필드 길이가 0 텍스트 문자열을 저장할 수 있다면, 당신은 길이 제로를 저장할 수 있어야합니다. 그래서 당신은 0부터 시작하여, 256 개 별개의 길이 값을 허용 할 수 있습니다 : 0-255.

  7. ==============================

    7.종종으로 VARCHAR은 파스칼 문자열로 구현됩니다 : 바이트 # 0에서 실제 길이를 들고. 길이를 따라서 (255)에 결합 된 (바이트의 값은 0에서 255까지 변화)

    종종으로 VARCHAR은 파스칼 문자열로 구현됩니다 : 바이트 # 0에서 실제 길이를 들고. 길이를 따라서 (255)에 결합 된 (바이트의 값은 0에서 255까지 변화)

  8. ==============================

    8.<< 비트의 기초를 다시 수집 / 저장 바이트는 256와 65,536 사이의 정수와 256 개의 바이트 이하의 정수 저장 한 바이트를 필요로한다. 그러므로, .... 저장소 511 또는 512 또는 그 문제에 대한 동일한 공간 65535 (2 바이트)을 필요 따라서, 위의 설명에서 언급이 인수 VARCHAR (512) 또는 VARCHAR (511)에 대한 N / A 인 것이 분명하다.

    << 비트의 기초를 다시 수집 / 저장 바이트는 256와 65,536 사이의 정수와 256 개의 바이트 이하의 정수 저장 한 바이트를 필요로한다. 그러므로, .... 저장소 511 또는 512 또는 그 문제에 대한 동일한 공간 65535 (2 바이트)을 필요 따라서, 위의 설명에서 언급이 인수 VARCHAR (512) 또는 VARCHAR (511)에 대한 N / A 인 것이 분명하다.

  9. ==============================

    9.부호없는 8 비트 = 256 바이트

    부호없는 8 비트 = 256 바이트

    255 개 + 문자 길이 바이트 0

  10. ==============================

    10.그것은 모든 문자열은 NUL 종료, 또는 "백 슬래시 제로를"필요한 것을 사용. 업데이트 된 데이터베이스는이 없습니다. 이 문자열이 종료 된 경우 시스템이 알고 있도록 "\ 0"마지막에 자동으로 추가하여 "텍스트의 255 자"였다. 당신은 VARCHAR (256)는 상기 경우 257 끝나게 것입니다 그리고 당신은 하나 개의 문자를 다음 레지스터에있을 것입니다. 낭비. 모든 VARCHAR (255) 및 VARCHAR (31)이었다 이유입니다. 습관 중 255가 붙어 주위를 갖고있는 것 같아요하지만 31의 32 개의를되었고, 511의 512 개의되었다. 그 부분은 이상입니다. 그것은 자신이 VARCHAR (256)를 쓸 수 있도록 어렵다.

    그것은 모든 문자열은 NUL 종료, 또는 "백 슬래시 제로를"필요한 것을 사용. 업데이트 된 데이터베이스는이 없습니다. 이 문자열이 종료 된 경우 시스템이 알고 있도록 "\ 0"마지막에 자동으로 추가하여 "텍스트의 255 자"였다. 당신은 VARCHAR (256)는 상기 경우 257 끝나게 것입니다 그리고 당신은 하나 개의 문자를 다음 레지스터에있을 것입니다. 낭비. 모든 VARCHAR (255) 및 VARCHAR (31)이었다 이유입니다. 습관 중 255가 붙어 주위를 갖고있는 것 같아요하지만 31의 32 개의를되었고, 511의 512 개의되었다. 그 부분은 이상입니다. 그것은 자신이 VARCHAR (256)를 쓸 수 있도록 어렵다.

  11. ==============================

    11.나는이 귀하의 질문에 대답 것 같아요. 외모는 이전 시스템에서 VARCHAR의 최대 한계처럼. 나는 또 다른 유래 질문을 벗었다.

    나는이 귀하의 질문에 대답 것 같아요. 외모는 이전 시스템에서 VARCHAR의 최대 한계처럼. 나는 또 다른 유래 질문을 벗었다.

    모든 텍스트 기반의 필드에 대한 일반적인 VARCHAR (255)를 사용하여이 단점은?

  12. ==============================

    12.데이터는 이진 시스템의 메모리에 저장되며, 0과 1은 이진수입니다. 1 바이트 (8 비트)에 들어갈 수있는 최대 이진수 소수 255-11111111하는 변환이다.

    데이터는 이진 시스템의 메모리에 저장되며, 0과 1은 이진수입니다. 1 바이트 (8 비트)에 들어갈 수있는 최대 이진수 소수 255-11111111하는 변환이다.

  13. from https://stackoverflow.com/questions/2340639/why-historically-do-people-use-255-not-256-for-database-field-magnitudes by cc-by-sa and MIT license