MySQL TEXT 열의 스토리지 요구 사항

MySQL TEXT 열의 스토리지 요구 사항

errormsg2약 12개의 열이 있는 MyISAM 스토리지 엔진을 사용하는 MySQL 테이블이 있습니다 .

내가 추정하는 열 중 두 개는 각 행에 사용되는 공간의 대부분을 차지하며 TEXT 데이터 유형입니다. 그들은 backtrace과 입니다 msg.

각 행에 필요한 저장 공간을 추정하려고 하다가 다음과 같은 모순을 발견했습니다.

show table status where name = 'errormsg2';(data_length + index_length) / rows이는 행당 약 778바이트임을 보여줍니다 .

select avg( bit_length( em.backtrace ) + bit_length( em.msg ) ) / 8 from errormsg2 em;이 두 열의 행당 평균 899바이트의 텍스트를 보여줍니다.

테이블이 사용하는 것보다 더 많은 데이터를 저장하는 것이 어떻게 가능합니까? 내가 무엇을 놓치고 있나요?

답변1

고려해야 할 한 가지는 인코딩 문제입니다. 예를 들어 UTF-8은 일부 문자에 5바이트를 사용합니다. 데이터가 없거나 가변 데이터가 있는 경우 데이터베이스는 최악의 상황, 즉 모든 문자의 길이가 5바이트일 수 있다고 가정합니다. 따라서 실제로 사용해야 하는 것보다 더 많은 것을 할당할 수 있습니다.

UTF-16은 비록 2바이트에 불과하다고 알려져 있지만 동일한 종류의 문제에 빠질 수도 있습니다. UTF-16은 4바이트 길이의 서로게이트 쌍을 인코딩해야 합니다. UTF-16에는 다른 여러 문제가 있으며일부항상 UTF-8을 사용하는 옹호자

관련 정보