In SQL, TEXT is usually a special case. Fields are usually stored on disk to facilitate access and indexing, but TEXT and BLOBS are usually stored (and ignored) in a separate block of disk space with only the offset stored in the row. Therefore, there is no need to allocate additional space. Updating the value simply leads to the only update of the offset pointer in the storage area of ββthe main table and saving the current value in the block - there is practically nothing that could be improved in performance when reserving enough space for the maximum value. Almost certainly, the actual value is stored to occupy only the necessary space at any given time. Varchars, on the other hand, have traditionally been kept within the actual range and therefore allocated the maximum amount of space. Perhaps this has changed since their size has grown to 16 bits or not.
source share