Why does the String varchar length defaults to 191? · prisma/prisma · Discussion #17781
Why are database columns 191 characters?
블로그에 정리하였습니다.
[DB] Prisma에서 String VARCHAR의 길이는 어째서 varChar(191)일까?
255는 191보다 훨씬 더 의미가 있습니다. 어떻게 191에 도달하게 되었나요? 이모티콘을 비난하겠습니다 😜. 첫 번째 이모티콘을 포함하는 문자 집합인 utf8mb4가 있었으니까요. 2000년대 초반의 MySQL은 바차르 열에서 255자를 지원하고 색인을 생성하는 데 만족했습니다. 그러나 가장 널리 사용되는 MySQL 데이터베이스 엔진(innodb)에서 가장 널리 사용되는 텍스트 인코딩(라틴1 또는 utf8)은 모든 문자 2 를 저장하는 데 3바이트가 충분하다고 가정했으며 , utf8mb4가 한자 및 🐟와 같은 문자가 등장하자 각 문자를 저장하는 데 4바이트가 필요했습니다. 선택할 수 있는 문자가 더 많았으므로 이를 참조하는 데 더 많은 바이트가 필요했습니다.
MySQL 데이터베이스가 작동하는 방식은 **innodb
**인덱스에 대해 767바이트만 가질 수 있다는 것입니다. 이는 255개의 3바이트 문자( 767/3 = 255
)를 저장하기에 충분합니다. 이는 인덱싱하는 데이터의 크기를 아는 것을 기반으로 한 인덱스 최적화의 극단적인 예입니다! 따라서 문자를 저장하는 데 더 많은 공간이 필요하다면 색인화할 수 있는 문자 수는 더 적어져야 합니다. 구체적으로는 **767/4 = 191
**캐릭터! 더 많은 소프트웨어가 전 세계 고객을 지원함에 따라 기본값으로 varchar(191)
이 varchar(255)
를 대체하였습니다 . **varchar(255)
**해외 사용자를 지원할 필요가 없는 소프트웨어 애플리케이션의 경우 2010년대 초 사용자가 이모티콘 지원(종종 스마트폰의 등장과 관련됨)을 기대하기 시작하면 업그레이드도 필요했습니다.
요즘에는 최신 데이터베이스에서 "모든" 문자를 지원할 수 있는 utf8mb4 등의 문자 인코딩이 기본값으로 사용되며, 고정 길이 인덱스는 이제 과거의 일이 되었습니다. 그러나 호환성을 보장하기 위해 많은 애플리케이션에서 여전히 191자의 기본값을 사용하고 있습니다. 어쨌든 인덱스는 비교 대상 문자열의 크기를 알고 있을 때 가장 잘 작동하므로 속도상의 이유로 열 길이에 어느 정도 제한을 두는 것이 좋으며, 역사와 관성 덕분에 191자 제한은 여전히 유지되고 있습니다.
191
인 건 어떤 의미에요? (질문)