본문 바로가기
관리자

Programming-[Backend]/Database

[TIL] 😎 MYSQL 필드 최대 길이 정의 varchar 255 vs 191

728x90
반응형

varchar 255 이유

MYSQL에서 필드의 최대 길이를 정의할 때 varchar(255)로 지정하는게 일반적이였다. 이것은 참조 링크에 따르면 MYSQL에서 메모리 용량을 8비트(256)에 맞추고 오래된 database와 호환하기 위해서 등이였다고 한다.

 

그리고 MYSQL에서 varchar로 된 필드를 indexing하기 위한 최대 용량을 767 byte로 잡아놨었다. 이것은 utf-8 기준이였고 767/3 = 255.666...이 되기 때문에 varchar 255로 정의하는게 관례였다. 3으로 나누는 이유는 utf-8 기준으로 모든 글자들이 3바이트에 포함되었기 때문이었다.

 

 

varchar 191 이유

그러다가 이모지 🚀까지 포함하는 utf8mb4 collation 규칙이 적용되면서 한 글자에 4바이트가 필요하게 되었다. 따라서 767/4 = 191.75를 넘지 않도록 varchar 191로 정의한다.

collation 규칙은 데이터베이스 스키마를 편집하는 화면에서 확인할 수 있다.

현대의 데이터베이스

2010년 이후 현대 데이터베이스는 인덱싱에 이런 길이 제한을 두지 않는다. 다만 최대 길이를 지정해야하는 것은 마찬가지이기 때문에 적절한 기준이 없다면 역사와 관습에 따라 191로 최대 길이를 정한다.

 

 

 

참조 

https://www.grouparoo.com/blog/varchar-191

 

Why are database columns 191 characters?

`varchar(191)` is such an odd number - how did we get here?

www.grouparoo.com

 

 

https://dev.mysql.com/blog-archive/mysql-8-0-when-to-use-utf8mb3-over-utf8mb4/

 

MySQL :: MySQL 8.0: When to use utf8mb3 over utf8mb4?

Long time MySQL users will recognize that there are two varieties of utf8 support in MySQL; utf8mb3 and utf8mb4.  Let me dig a little bit deeper in explaining the history between the two: MySQL 4.1 (2004) was the first version to support character sets an

dev.mysql.com

 

 

feat. 회사 동료 pjh님 감사합니다

728x90
반응형