왜 사람들은 역사적으로 데이터베이스 필드 크기에 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
'it-source' 카테고리의 다른 글
내 Git 저장소가 왜 그렇게 큰가요? (0) | 2023.09.03 |
---|---|
Excel VBA에서 사용자에게 범위 선택 도구/유틸리티 제공 (0) | 2023.09.03 |
개체를 쓰는 동안 Git이 중단됨 (0) | 2023.09.03 |
MariaDB(마스터)에서 MySQL 5.6(슬레이브)로의 복제 (0) | 2023.09.03 |
Spring으로 .html 파일을 제공하는 방법 (0) | 2023.09.03 |