MySQL TEXT 欄位的儲存需求

MySQL TEXT 欄位的儲存需求

我有一個名為「使用 MyISAM 儲存引擎」的 MySQL 表,errormsg2其中包含大約十幾個欄位。

我估計其中兩列佔據了每行使用的大部分空間,並且它們的資料類型為 TEXT。他們是backtracemsg

我試圖估計每行所需的儲存量,但發現了以下矛盾:

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 個位元組,但也可能遇到相同類型的問題:它必須對 4 個位元組長的代理項對進行編碼。 UTF-16 還有多個其他問題,並且一些提倡始終使用 UTF-8

相關內容