it-source

왜 사람들은 역사적으로 데이터베이스 필드 크기에 256이 아닌 255를 사용합니까?

criticalcode 2023. 9. 3. 16:20
반응형

왜 사람들은 역사적으로 데이터베이스 필드 크기에 256이 아닌 255를 사용합니까?

데이터베이스 필드의 크기가 255자로 설정되는 경우가 많은데, 전통적/역사적 이유는 무엇입니까?페이징/메모리 제한 및 성능과 관련이 있다고 생각하지만 255와 256 사이의 차이는 항상 저를 혼란스럽게 합니다.

varchar(255)

인덱서가 아닌 용량이나 크기를 고려할 때 256보다 255개가 더 선호되는 이유는 무엇입니까?바이트가 어떤 목적(터미네이터 또는 Null 등)을 위해 예약되어 있습니까?

아마도 varchar(0)는 넌센스입니까(용량이 0)?어떤 경우에 2^8의 공간은 확실히 256이어야 합니까?

성능 이점을 제공하는 다른 규모가 있습니까?예를 들어, varchar(512)가 varchar(511) 또는 varchar(510)보다 성능이 떨어집니까?

이 값은 이전 및 새 관계 데이터베이스에 대해 동일합니까?

고지 사항 - 저는 개발자이지 DBA가 아닙니다. 저는 제 비즈니스 로직에 맞는 필드 크기와 유형을 사용합니다. 하지만 더 이상 관련이 없더라도 이러한 선호의 역사적 이유를 알고 싶습니다.

편집:

답변에 감사드리며, 크기를 저장하는 데 바이트가 사용된다는 합의가 있는 것 같습니다. 하지만 이것이 제 마음속에 결정적으로 문제를 해결하지는 못합니다.

메타데이터(문자열 길이)가 동일한 연속 메모리/디스크에 저장되어 있다면 어느 정도 의미가 있습니다.1바이트의 메타데이터와 255바이트의 문자열 데이터는 서로 매우 잘 어울리며, 256바이트의 연속적인 스토리지에 적합하며, 아마도 깔끔하고 깔끔할 것입니다.

그러나...메타데이터(문자열 길이)가 실제 문자열 데이터(아마 마스터 테이블)와 별도로 저장되는 경우, 메타데이터의 1바이트 정수만 저장하는 것이 더 쉽다는 이유만으로 문자열 데이터의 길이를 1바이트 제한하는 것은 약간 이상하게 보입니다.

두 경우 모두 DB 구현에 따라 달라질 수 있는 미묘한 차이인 것 같습니다.255를 사용하는 관행이 꽤 널리 퍼져 있는 것 같아서, 처음에 누군가가 그것에 대해 좋은 사례를 주장했을 것입니다, 그 사례가 무엇이었는지 기억하는 사람이 있습니까?프로그래머들은 이유 없이 어떠한 새로운 관행도 채택하지 않을 것이며, 이것은 한 때 새로운 것임에 틀림없습니다.

최대 길이가 255자인 DBMS는 단일 바이트를 사용하여 필드의 데이터 길이를 표시하도록 선택할 수 있습니다.제한이 256 이상이면 2바이트가 필요합니다.

은 길의 0 값다에대음확유히효합다니실해이은▁for▁valid에 확실히 합니다.varchar데이터(특별한 제약이 없는 한).대부분의 시스템은 이러한 빈 문자열을 NULL과 구별하여 처리하지만 일부 시스템(특히 Oracle)은 빈 문자열을 NULL과 동일하게 처리합니다. 빈 문자열이 NULL이 아닌 시스템의 경우 값을 NULL로 간주할지 여부를 나타내기 위해 행 어딘가에 추가 비트가 필요합니다.

이는 과거의 최적화 방식이며 현재 대부분의 시스템과 관련이 없습니다.

255는 mySQL4 이전 버전의 바하 제한이었습니다.

또한 255자 + Null 터미네이터 = 256

또는 1바이트 길이 설명자가 0-255자 범위를 제공합니다.

255는 단일 바이트 부호 없는 정수(약 8비트 바이트)에 저장할 수 있는 가장 큰 숫자 값입니다. 따라서 문자열의 길이를 저장하는 응용 프로그램은 "크기" 변수에 대해 1바이트만 할당하면 되므로 256보다 255를 선호합니다.

MySQL 설명서에서:

데이터 유형:
VARCHAR(M),VARBINARY(M)

필요한 스토리지:
L~ 경우 , " " " 0 ~ 255"는 1바이트입니다.L이 255바이트를 255이 초 값 2바

이해하고 선택합니다.

255는 8비트 정수의 최대값입니다. 11111111 = 255입니다.

성능 이점을 제공하는 다른 규모가 있습니까?를 들면, 를들어예,어들,varchar(512)다보성 낮은가과보다 실적이 .varchar(511)또는varchar(510)?

비트/바이트 저장의 기본 사항을 기억하기 위해 256 미만의 정수를 저장하려면 1바이트가 필요하고 256에서 65536 사이의 정수에 대해서는 2바이트가 필요합니다.
따라서 511 또는 512 또는 65535를 저장하는 데 동일한 공간(2바이트)이 필요합니다.
따라서 위의 토론에서 언급된 이 주장은 다음에 대한 N/A임이 분명합니다.varchar(512)또는varchar(511).

최대 길이가 255이면 데이터베이스 엔진은 각 필드의 길이를 저장하는 데 1바이트만 사용할 수 있습니다.1바이트의 공간을 사용하면 문자열 길이에 대해 2^8=256개의 고유 값을 저장할 수 있습니다.

그러나 필드에 길이가 0인 텍스트 문자열을 저장하도록 허용할 경우 길이가 0인 텍스트 문자열을 저장할 수 있어야 합니다.따라서 0부터 시작하는 256개의 고유 길이 값을 허용할 수 있습니다.

예전에는 모든 문자열이 필요했습니다.NUL종료자 또는 "백슬래시 제로".업데이트된 데이터베이스에는 이러한 기능이 없습니다.시스템이 문자열이 끝나는 위치를 알 수 있도록 끝에 "\0"이 자동으로 추가된 "255자의 텍스트"였습니다.당신이 말했다면VARCHAR(256)결국 257이 되고 한 캐릭터에 대한 다음 레지스터에 들어가게 됩니다.낭비적인.그래서 모든 게VARCHAR(255)그리고.VARCHAR(31)습관적으로 255가 붙어 있는 것처럼 보이지만 31은 32가 되고 511은 512가 되었습니다.그 부분이 이상해요.내가 글을 쓰게 하는 것은 어렵습니다.VARCHAR(256).

종종 varchar는 파스칼 문자열로 구현됩니다: 바이트 #0의 실제 길이를 유지합니다.따라서 길이는 255로 제한되었습니다. (바이트 값은 0에서 255까지 다양합니다.)

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

255자 + 길이의 경우 바이트 0

이것이 당신의 질문에 대한 답이 될 수도 있다고 생각합니다.초기 시스템에서는 바르샤르의 최대 한계였던 것 같습니다.저는 다른 스택 오버플로 질문에서 그것을 뺐습니다.

물론 가장 긴 우편 주소가 무엇인지 알기 어렵기 때문에 많은 사람들이 어떤 주소보다 확실히 긴 VARCHAR를 선택하는 이유입니다.또한 255는 일부 데이터베이스(및 Postgre)에서 새벽에 VARCHAR의 최대 길이였을 수 있기 때문에 일반적입니다.최근까지 SQL).

모든 텍스트 기반 필드에 대해 일반적인 varchar(255)를 사용하면 단점이 있습니까?

데이터는 이진 시스템의 메모리에 저장되며 0과 1은 이진 숫자입니다.1바이트(8비트)에 들어갈 수 있는 가장 큰 이진수는 10진수 255로 변환되는 111111입니다.

언급URL : https://stackoverflow.com/questions/2340639/why-historically-do-people-use-255-not-256-for-database-field-magnitudes

반응형